home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / twoplayer.s < prev    next >
Text File  |  1997-11-28  |  123KB  |  8,317 lines

  1.  
  2. maxscrdiv EQU 8
  3. max3ddiv EQU 5
  4. playerheight EQU 12*1024
  5. playercrouched EQU 6*1024
  6. scrheight EQU 80
  7.  
  8. ; k/j/m
  9. ; 4/8
  10. ; s/x
  11. ; b/n
  12.  
  13. xpos EQU 0    ;l
  14. zpos EQU 4    ;l
  15. zsinval EQU 8    ;w
  16. zcosval EQU 10    ;w
  17. ztox EQU 12    ;l
  18. xsinval EQU 16    ;w
  19. xcosval EQU 18    ;w
  20. xspd EQU 20    ;w
  21. zspd EQU 22    ;wd
  22. mapx EQU 24    ;b
  23. mapz EQU 25    ;b
  24. whichtile EQU 26 ;b
  25. xofflight EQU 28    ;w
  26. zofflight EQU 30    ;w
  27. offlight EQU 32        ;w
  28. zlinestore EQU 34
  29. zlinedir EQU 38
  30. zposdir EQU 40
  31. zposstore EQU 42
  32. xdiststore EQU 44
  33. xdistdir EQU 46
  34. zwallfound EQU 48
  35.  
  36. xlinestore EQU 50
  37. xlinedir EQU 54
  38. xposdir EQU 56
  39. xposstore EQU 58
  40. zdiststore EQU 60
  41. zdistdir EQU 62
  42. xwallfound EQU 64
  43.  
  44.  
  45. midoffset EQU 104*4*40
  46.  
  47.  SECTION Scrn,CODE
  48. OpenLib         equ -552
  49. CloseLib        equ -414
  50.  
  51. INTREQ    equ    $09C
  52. INTENA    equ    $09A
  53. INTENAR    equ    $01C
  54. DMACON    equ    $096
  55.  
  56. SERPER    equ    $032
  57. SERDATR    equ    $018
  58. SERDAT    equ    $030
  59. vhposr        equ $006    
  60. vhposrl        equ $007 
  61.  
  62. bltcon0        equ $40 
  63. bltcon1        equ $42
  64. bltcpt        equ $48
  65. bltbpt        equ $4c
  66. bltapt        equ $50
  67. spr0ctl        equ $142
  68. spr1ctl        equ $14a
  69. spr2ctl        equ $152
  70. spr3ctl        equ $15a
  71. spr4ctl        equ $162
  72. spr5ctl        equ $16a
  73. spr6ctl        equ $172
  74. spr7ctl        equ $17a
  75. spr0pos        equ $140
  76. spr1pos        equ $148
  77. spr2pos        equ $150
  78. spr3pos        equ $158
  79. spr4pos        equ $160
  80. spr5pos        equ $168
  81. spr6pos        equ $170
  82. spr7pos        equ $178
  83. bltdpt         equ $54
  84. bltafwm        equ $44
  85. bltalwm        equ $46
  86. bltsize         equ $58
  87. bltcmod         equ $60
  88. bltbmod         equ $62
  89. bltamod         equ $64
  90. bltdmod         equ $66
  91. diwstart        equ $8e         ; Screen hardware registers.
  92. diwstop         equ $90
  93. ddfstart        equ $92
  94. ddfstop         equ $94
  95. bplcon0         equ $100
  96. bplcon1         equ $102
  97. col0            equ $180
  98. col1            equ $182
  99. col2        equ $184
  100. col3        equ $186
  101. col4        equ $188
  102. col5        equ $18a
  103. col6        equ $18c
  104. col7        equ $18e
  105. col8            equ $190
  106. col9            equ $192
  107. col10           equ $194
  108. dmacon        equ $96
  109. dmaconr        equ $002
  110. intenar        equ $01c
  111. intena        equ $09a
  112. intreq        equ $09c
  113. intreqr        equ $01e
  114. intreqrl    equ $01f
  115. bpl1pth         equ $e0
  116. bpl1ptl         equ $e2
  117. bpl2pth        equ $e4
  118. bpl2ptl        equ $e6
  119. bpl3pth        equ $e8
  120. bpl3ptl        equ $ea
  121. bpl4pth        equ $ec
  122. bpl4ptl        equ $ee
  123. bpl5pth        equ $f0
  124. bpl5ptl        equ $f2
  125. bpl6pth        equ $f4
  126. bpl6ptl        equ $f6
  127. bpl7pth        equ $f8
  128. bpl7ptl        equ $fa
  129. bpl8pth        equ $fc
  130. bpl8ptl        equ $fe
  131. spr0pth        equ $120
  132. spr0ptl        equ $122
  133. spr1pth        equ $124
  134. spr1ptl        equ $126
  135. spr2pth        equ $128
  136. spr2ptl        equ $12a
  137. spr3pth        equ $12c
  138. spr3ptl        equ $12e
  139. spr4pth        equ $130
  140. spr4ptl        equ $132
  141. spr5pth        equ $134
  142. spr5ptl        equ $136
  143. spr6pth        equ $138
  144. spr6ptl        equ $13a
  145. spr7pth        equ $13c
  146. spr7ptl        equ $13e
  147.  
  148. ; move.l #length,d0
  149. ; moveq.l #2,d1    ; chipmem
  150. ; move.l 4.w,a6
  151. ; jsr allocmem(a6) = -198
  152.  
  153. ; tst.l d0
  154. ; beq.s ohbugger
  155. ; move.l d0,memaddr
  156.  
  157.  
  158. ; move.l 4.w,a6
  159. ; move.l memaddr,a1
  160. ; move.l #size,d0
  161. ; jsr freemem(a6) =-210
  162.  
  163.  
  164. ** This waits for the blitter to finish before allowing program
  165. ** execution to continue.
  166.  
  167. WB MACRO
  168. \@bf:
  169.  btst #6,dmaconr(a6)
  170.  bne.s \@bf
  171.  ENDM
  172.  
  173. *Another version for when d6 <> dff000
  174.  
  175. WBSLOW MACRO
  176. \@bf:
  177.  btst #6,$dff000+dmaconr
  178.  bne.s \@bf
  179.  ENDM
  180.  
  181. WT MACRO
  182. \@bf:
  183.  btst #6,(a3)
  184.  bne.s \@bd
  185.  rts
  186. \@bd: 
  187.  btst #4,(a0)
  188.  beq.s \@bf
  189.  ENDM
  190.  
  191. WTNOT MACRO
  192. \@bf:
  193.  btst #6,(a3)
  194.  bne.s \@bd
  195.  rts
  196. \@bd: 
  197.  btst #4,(a0)
  198.  bne.s \@bf
  199.  ENDM
  200.  
  201. **
  202.  
  203.  include "macros.i"
  204.  include "ab3:source/defs.i"
  205.  
  206.  move.w (a0)+,mors
  207.  
  208. * Load level into buffers.
  209.  clr.b doanything
  210.  
  211.  move.l 4.w,a6
  212.  move.l #doslibname,a1
  213.  moveq #0,d0
  214.  jsr -552(a6)
  215.  move.l d0,doslib
  216.  
  217. ; bra noload
  218.  
  219.  move.l d0,a6
  220.  move.l #LDname,d1
  221.  move.l #1005,d2
  222.  jsr -30(a6)
  223.  move.l d0,LDhandle
  224.  
  225.  move.l doslib,a6
  226.  move.l d0,d1
  227.  move.l #LEVELDATA,d2
  228.  move.l #70000,d3
  229.  jsr -42(a6)
  230.  
  231.  move.l doslib,a6
  232.  move.l LDhandle,d1
  233.  jsr -36(a6)
  234.  
  235. ********
  236.  
  237.  move.l doslib,a6
  238.  move.l #LGname,d1
  239.  move.l #1005,d2
  240.  jsr -30(a6)
  241.  move.l d0,LGhandle
  242.  
  243.  move.l doslib,a6
  244.  move.l d0,d1
  245.  move.l #LEVELGRAPHICS,d2
  246.  move.l #30000,d3
  247.  jsr -42(a6)
  248.  
  249.  move.l doslib,a6
  250.  move.l LGhandle,d1
  251.  jsr -36(a6)
  252.  
  253. ********
  254.  
  255.  move.l doslib,a6
  256.  move.l #LCname,d1
  257.  move.l #1005,d2
  258.  jsr -30(a6)
  259.  move.l d0,LChandle
  260.  
  261.  move.l doslib,a6
  262.  move.l d0,d1
  263.  move.l #LEVELCLIPS,d2
  264.  move.l #50000,d3
  265.  jsr -42(a6)
  266.  
  267.  move.l doslib,a6
  268.  move.l LChandle,d1
  269.  jsr -36(a6)
  270.  
  271. *******
  272.  
  273. noload:
  274.  
  275. ********
  276.  
  277.  jsr LOADWALLS
  278.  
  279. ; move.l doslib,a6
  280. ; move.l #Prefsname,d1
  281. ; move.l #1005,d2
  282. ; jsr -30(a6)
  283. ; move.l d0,Prefshandle
  284.  
  285. ; move.l doslib,a6
  286. ; move.l d0,d1
  287. ; move.l #Prefsfile,d2
  288. ; move.l #50,d3
  289. ; jsr -42(a6)
  290.  
  291. ; move.l doslib,a6
  292. ; move.l Prefshandle,d1
  293. ; jsr -36(a6)
  294.  
  295. *******
  296.  
  297.  cmp.b #'s',Prefsfile+2
  298.  seq STEREO
  299.  
  300.  move.l doslib,d0
  301.  move.l d0,a1
  302.  move.l 4.w,a6
  303.  jsr CloseLib(a6)
  304.  
  305.  jmp stuff
  306. endstuff:
  307.  
  308.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  309.  move.w #184,SERPER(a6)    ;19200 baud, 8 bits, no parity
  310.  
  311.  move.w #$87c0,dmacon(a6)
  312.  move.w #$8020,dmacon(a6)
  313.  move.w intenar(a6),saveinters
  314.  move.w #$7fff,intena(a6)
  315.  move.w #$00ff,$dff09e
  316.  
  317. *** Put myself in supervisor mode
  318.  
  319.  move.l #blag,$80
  320.  trap #0
  321. ; move.l $6c,d0
  322. ; move.l #blag,$6c
  323. ; move.w #$8010,intreq(a6)
  324.  
  325.  rts
  326.  
  327. saveit: ds.l 10
  328. doslibname: dc.b 'dos.library',0
  329.  even
  330. doslib: dc.l 0
  331.  
  332. mors: dc.w 0
  333.  
  334. LDname: dc.b 'ab3:includes/tstlev.bin',0
  335.  even
  336. LDhandle: dc.l 0
  337. LGname: dc.b 'ab3:includes/tstlev.graph.bin',0
  338.  even
  339. LGhandle: dc.l 0
  340. LCname: dc.b 'ab3:includes/tstlev.clips',0
  341.  even
  342. LChandle: dc.l 0
  343.  
  344. Prefsname: dc.b 'ram:prefs',0
  345.  even
  346. Prefshandle: dc.l 0
  347.  
  348. Prefsfile:
  349.  dc.b 'k4nx'
  350.  ds.b 50
  351.  
  352.  even
  353.  
  354. blag:
  355. ; move.w #$10,intreq(a6)
  356. ; move.l d0,$6c
  357. ; move.w #$7fff,intena(a6)
  358.  
  359.  move.w #$20,$dff1dc
  360.  
  361.  move.l $6c,saveit
  362.  move.l #Chan0inter,$6c
  363.  jsr KInt_Init
  364.  
  365.  
  366.  
  367. ****************************
  368. * Initialize level
  369. ****************************
  370. * Poke all clip offsets into
  371. * correct bit of level data.
  372. ****************************
  373.  lea.l LEVELGRAPHICS,a0
  374.  move.l 12(a0),a1
  375.  add.l a0,a1
  376.  move.l a1,ZoneGraphAdds
  377.  move.l (a0),a1
  378.  add.l a0,a1
  379.  move.l a1,DoorData
  380.  move.l 4(a0),a1
  381.  add.l a0,a1
  382.  move.l a1,LiftData
  383.  move.l 8(a0),a1
  384.  add.l a0,a1
  385.  move.l a1,SwitchData
  386.  adda.w #16,a0
  387.  move.l a0,ZoneAdds
  388.  
  389.  lea.l LEVELDATA,a1
  390.  move.l 16+6(a1),a2
  391.  add.l a1,a2
  392.  move.l a2,Points
  393.  move.w 8+6(a1),d0
  394.  lea 4(a2,d0.w*4),a2
  395.  move.l a2,PointBrights
  396.  
  397.  move.l 20+6(a1),a2
  398.  add.l a1,a2
  399.  move.l a2,FloorLines
  400.  move.l 24+6(a1),a2
  401.  add.l a1,a2
  402.  move.l a2,ObjectData
  403.  move.l 28+6(a1),a2
  404.  add.l a1,a2
  405.  move.l a2,PlayerShotData
  406.  move.l 32+6(a1),a2
  407.  add.l a1,a2
  408.  move.l a2,NastyShotData
  409.  move.l 36+6(a1),a2
  410.  add.l a1,a2
  411.  move.l a2,ObjectPoints  
  412.  move.l 40+6(a1),a2
  413.  add.l a1,a2
  414.  move.l a2,PLR1_Obj
  415.  move.l 44+6(a1),a2
  416.  add.l a1,a2
  417.  move.l a2,PLR2_Obj
  418.  move.w 14+6(a1),NumObjectPoints
  419.  
  420. ; bra noclips
  421.   
  422.  lea.l LEVELCLIPS,a2
  423.  moveq #0,d0
  424.  move.w 10+6(a1),d7    ;numzones
  425. assignclips:
  426.  move.l (a0)+,a3
  427.  add.l a1,a3    ; pointer to a zone
  428.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  429. dowholezone:
  430.  tst.w (a3)
  431.  blt.s nomorethiszone
  432.  tst.w 2(a3)
  433.  blt.s thisonenull
  434.  
  435.  move.l d0,d1
  436.  asr.l #1,d1
  437.  move.w d1,2(a3)
  438.  
  439. findnextclip:
  440.  cmp.w #-2,(a2,d0.l)
  441.  beq.s foundnextclip
  442.  addq.l #2,d0
  443.  bra.s findnextclip
  444. foundnextclip
  445.  addq.l #2,d0
  446.  
  447. thisonenull:
  448.  addq #8,a3 
  449.  bra.s dowholezone
  450. nomorethiszone:
  451.  dbra d7,assignclips
  452.  
  453.  lea (a2,d0.l),a2
  454.  move.l a2,CONNECT_TABLE
  455.  
  456. noclips:
  457.  
  458. * Put in addresses of glowything
  459.  
  460.  move.l red_des,a0
  461.  move.w (a0),d0
  462.  addq #1,d0
  463.  muls #6,d0
  464.  lea 2(a0,d0.w),a1
  465.  move.l red_des+4,a0
  466.  move.l a1,(a0)
  467.  move.w #0,(a1)
  468.  
  469.  move.l yellow_des,a0
  470.  move.w (a0),d0
  471.  addq #1,d0
  472.  muls #6,d0
  473.  lea 2(a0,d0.w),a1
  474.  move.l yellow_des+4,a0
  475.  move.l a1,(a0)
  476.  move.w #0,(a1)
  477.  
  478.  move.l green_des,a0
  479.  move.w (a0),d0
  480.  addq #1,d0
  481.  muls #6,d0
  482.  lea 2(a0,d0.w),a1
  483.  move.l green_des+4,a0
  484.  move.l a1,(a0)
  485.  move.w #0,(a1)
  486.  
  487.  move.l blue_des,a0
  488.  move.w (a0),d0
  489.  addq #1,d0
  490.  muls #6,d0
  491.  lea 2(a0,d0.w),a1
  492. ; move.l #protinit-750000,a6
  493.  move.l blue_des+4,a0
  494.  move.l a1,(a0)
  495.  move.w #0,(a1)
  496.  
  497.  
  498. ************************************
  499.  
  500.  cmp.b #'k',Prefsfile
  501.  bne.s nkb
  502.  st PLR1KEYS
  503.  clr.b PLR1PATH
  504.  clr.b PLR1MOUSE
  505.  clr.b PLR1JOY
  506. nkb:
  507.  cmp.b #'m',Prefsfile
  508.  bne.s nmc
  509.  clr.b PLR1KEYS
  510.  clr.b PLR1PATH
  511.  st PLR1MOUSE
  512.  clr.b PLR1JOY
  513. nmc:
  514.  cmp.b #'j',Prefsfile
  515.  bne.s njc
  516.  clr.b PLR1KEYS
  517.  clr.b PLR1PATH
  518.  clr.b PLR1MOUSE
  519.  st PLR1JOY
  520. njc:
  521.  
  522.  clr.b PLR1_StoodInTop
  523.  move.l #playerheight,PLR1s_height
  524.  
  525.  move.l #empty,pos1LEFT
  526.  move.l #empty,pos2LEFT
  527.  move.l #empty,pos1RIGHT
  528.  move.l #empty,pos2RIGHT
  529.  move.l #emptyend,Samp0endLEFT
  530.  move.l #emptyend,Samp1endLEFT
  531.  move.l #emptyend,Samp0endRIGHT
  532.  move.l #emptyend,Samp1endRIGHT
  533.  
  534.  move.l #nullspr,d0
  535.  move.w d0,s4l
  536.  move.w d0,s5l
  537.  move.w d0,s6l
  538.  move.w d0,s7l
  539.  swap d0
  540.  move.w d0,s4h
  541.  move.w d0,s5h
  542.  move.w d0,s6h
  543.  move.w d0,s7h 
  544.  
  545.  move.l #nullline,d0
  546.  move.w d0,n1l
  547.  swap d0
  548.  move.w d0,n1h
  549.  
  550.  move.l #Panel,d0
  551.  move.w d0,p1l
  552.  swap d0
  553.  move.w d0,p1h
  554.  move.l #Panel+40,d0
  555.  move.w d0,p2l
  556.  swap d0
  557.  move.w d0,p2h
  558.  move.l #Panel+40*2,d0
  559.  move.w d0,p3l
  560.  swap d0
  561.  move.w d0,p3h
  562.  move.l #Panel+40*3,d0
  563.  move.w d0,p4l
  564.  swap d0
  565.  move.w d0,p4h
  566.  move.l #Panel+40*4,d0
  567.  move.w d0,p5l
  568.  swap d0
  569.  move.w d0,p5h
  570.  move.l #Panel+40*5,d0
  571.  move.w d0,p6l
  572.  swap d0
  573.  move.w d0,p6h
  574.  move.l #Panel+40*6,d0
  575.  move.w d0,p7l
  576.  swap d0
  577.  move.w d0,p7h
  578.  move.l #Panel+40*7,d0
  579.  move.w d0,p8l
  580.  swap d0
  581.  move.w d0,p8h
  582.  
  583. *******************************
  584. * TIMER SCREEN SETUP
  585. ; move.l #TimerScr,d0
  586. ; move.w d0,p1l
  587. ; swap d0
  588. ; move.w d0,p1h
  589. ; move.w #$1201,Panelcon
  590.  
  591.  move.l #borders,d0
  592.  move.w d0,s0l
  593.  swap d0
  594.  move.w d0,s0h
  595.  move.l #borders+2592,d0
  596.  move.w d0,s1l
  597.  swap d0
  598.  move.w d0,s1h
  599.  move.l #borders+2592*2,d0
  600.  move.w d0,s2l
  601.  swap d0
  602.  move.w d0,s2h
  603.  move.l #borders+2592*3,d0
  604.  move.w d0,s3l
  605.  swap d0
  606.  move.w d0,s3h
  607.  
  608.  move.w #52*256+64,borders
  609.  move.w #212*256+0,borders+8
  610.  move.w #52*256+64,borders+2592
  611.  move.w #212*256+128,borders+8+2592
  612.  move.w #52*256+192,borders+2592*2
  613.  move.w #212*256+0,borders+8+2592*2
  614.  move.w #52*256+192,borders+2592*3
  615.  move.w #212*256+128,borders+8+2592*3
  616.  
  617.  move.l #FacePlace,d0
  618.  move.w d0,f1l
  619.  swap d0
  620.  move.w d0,f1h
  621.  move.l #FacePlace+32*24,d0
  622.  move.w d0,f2l
  623.  swap d0
  624.  move.w d0,f2h
  625.  move.l #FacePlace+32*24*2,d0
  626.  move.w d0,f3l
  627.  swap d0
  628.  move.w d0,f3h
  629.  move.l #FacePlace+32*24*3,d0
  630.  move.w d0,f4l
  631.  swap d0
  632.  move.w d0,f4h
  633.  move.l #FacePlace+32*24*4,d0
  634.  move.w d0,f5l
  635.  swap d0
  636.  move.w d0,f5h
  637.  
  638.  move.l #PanelCop,d0
  639.  move.w d0,pcl1
  640.  move.w d0,pcl2
  641.  swap d0
  642.  move.w d0,pch1
  643.  move.w d0,pch2
  644.  
  645.  move.l #bigfield,d0
  646.  move.w d0,ocl
  647.  swap d0
  648.  move.w d0,och
  649.  
  650.  bset.b #1,$bfe001
  651.  
  652.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  653.  move.w #$00ff,$dff09e
  654.  
  655. ; move.l #Blurbfield,$dff080
  656.  
  657.  move.w #0,d0
  658.  
  659.  move.l #scrn,d0
  660.  move.w d0,pl1l
  661.  swap d0
  662.  move.w d0,pl1h
  663.  
  664.  move.l #scrn+40,d0
  665.  move.w d0,pl2l
  666.  swap d0
  667.  move.w d0,pl2h
  668.  
  669.  move.l #scrn+80,d0
  670.  move.w d0,pl3l
  671.  swap d0
  672.  move.w d0,pl3h
  673.  
  674.  move.l #scrn+120,d0
  675.  move.w d0,pl4l
  676.  swap d0
  677.  move.w d0,pl4h
  678.  
  679.  move.l #scrn+160,d0
  680.  move.w d0,pl5l
  681.  swap d0
  682.  move.w d0,pl5h
  683.  
  684.  move.l #scrn+200,d0
  685.  move.w d0,pl6l
  686.  swap d0
  687.  move.w d0,pl6h
  688.  
  689.  move.l #scrn+240,d0
  690.  move.w d0,pl7l
  691.  swap d0
  692.  move.w d0,pl7h
  693.  
  694.  move.l #healthpal,a5
  695.  move.l #colbars,a0
  696.  move.l #colbars2,a2
  697.  move.w #scrheight-1,d0
  698.  move.l #0,d6
  699.  move.w #0,d3
  700.  move.w #$2bdf,startwait
  701.  move.w #$2d01,endwait
  702. fillcop
  703.  move.w #$180,d1
  704.  
  705.  move.l a0,a1
  706.  move.l a2,a3
  707.  move.w #$10c,(a1)+
  708.  move.w #$10c,(a3)+
  709.  move.w d3,(a1)+
  710.  move.w d3,(a3)+
  711.  eor.w #$8000,d3
  712.  
  713.  move.w #$106,(a1)+
  714.  move.w #$106,(a3)+
  715.  move.w #$2c42,d5
  716.  or.w d3,d5
  717.  and.w #$fffe,d5
  718.  move.w d5,(a1)+
  719.  move.w d5,(a3)+
  720.  bsr do32
  721.  
  722.  move.w #$106,(a1)+
  723.  move.w #$106,(a3)+
  724.  move.w #$4c42,d5
  725.  or.w d3,d5
  726.  and.w #$fffe,d5
  727.  move.w d5,(a1)+
  728.  move.w d5,(a3)+
  729.  bsr do32
  730.  
  731.  move.w #$106,(a1)+
  732.  move.w #$106,(a3)+
  733.  move.w #$6c42,d5
  734.  or.w d3,d5
  735.  and.w #$fffe,d5
  736.  move.w d5,(a1)+
  737.  move.w d5,(a3)+
  738.  bsr do32
  739.  
  740. **********************************
  741.  
  742.  cmp.b #'s',option
  743.  bra.s smallscrn
  744.  
  745.  move.w startwait,(a1)+
  746.  move.w #$fffe,(a1)+
  747.  move.w endwait,(a1)+
  748.  move.w #$ff00,(a1)+
  749.  move.w startwait,(a3)+
  750.  move.w #$fffe,(a3)+
  751.  move.w endwait,(a3)+
  752.  move.w #$ff00,(a3)+
  753.  
  754.  
  755.  add.w #$300,startwait
  756.  add.w #$300,endwait
  757.  
  758. smallscrn: 
  759.  
  760.  move.l #$1060c42,(a1)+
  761.  move.l #$1060c42,(a3)+
  762.  move.w #$19e,(a1)+
  763.  move.w (a5),(a1)+
  764.  move.w #$19e,(a3)+
  765.  move.w (a5)+,(a3)+
  766.  
  767. **********************************
  768.  
  769.  adda.w #104*4,a0
  770.  adda.w #104*4,a2
  771.  
  772.  dbra d0,fillcop
  773.  
  774. **********************************
  775.  cmp.b #'s',option
  776.  bra smallnotlarge
  777.  move.w #$38,fetchstart
  778.  move.w #$b8,fetchstop
  779.  move.w #$2c81,winstart
  780.  move.w #$2cc1,winstop
  781.  move.w #-40,modulo
  782.  move.w #-40,modulo+4
  783.  
  784.  move.l #scrn+40,a0
  785.  move.l #scrn+160,a1
  786.  move.l #scrn+280,a2
  787.  move.l #scrntab,a3
  788.  move.w #319,d7    ; counter
  789.  move.w #0,d1    ; xpos
  790. plotscrnloop:
  791.  move.b (a3)+,d0
  792.  move.w d1,d2
  793.  asr.w #3,d2
  794.  move.b d1,d3
  795.  not.b d3
  796.  bclr.b d3,-40(a0,d2.w)
  797.  bclr.b d3,(a0,d2.w)
  798.  bclr.b d3,40(a0,d2.w)
  799.  bclr.b d3,-40(a1,d2.w)
  800.  bclr.b d3,(a1,d2.w)
  801.  bclr.b d3,40(a1,d2.w)
  802.  bclr.b d3,-40(a2,d2.w)
  803.  btst #0,d0
  804.  beq.s nobp1
  805.  bset.b d3,-40(a0,d2.w)
  806. nobp1:
  807.  btst #1,d0
  808.  beq.s nobp2
  809.  bset.b d3,(a0,d2.w)
  810. nobp2:
  811.  btst #2,d0
  812.  beq.s nobp3
  813.  bset.b d3,40(a0,d2.w)
  814. nobp3:
  815.  btst #3,d0
  816.  beq.s nobp4
  817.  bset.b d3,-40(a1,d2.w)
  818. nobp4:
  819.  btst #4,d0
  820.  beq.s nobp5
  821.  bset.b d3,(a1,d2.w)
  822. nobp5:
  823.  btst #5,d0
  824.  beq.s nobp6
  825.  bset.b d3,40(a1,d2.w)
  826. nobp6:
  827.  btst #6,d0
  828.  beq.s nobp7
  829.  bset.b d3,-40(a2,d2.w)
  830. nobp7:
  831.  
  832.  addq #1,d1
  833.  
  834.  dbra d7,plotscrnloop
  835.  
  836. smallnotlarge:
  837.  
  838. **********************************
  839.  
  840. ****************************
  841.  jsr INITPLAYER
  842. ; bsr initobjpos
  843. ****************************
  844.  
  845.  
  846.  move.l #$dff000,a6
  847.  
  848.  move.l #null,$dff0a0
  849.  move.w #100,$dff0a4
  850.  move.w #443,$dff0a6
  851.  move.w #63,$dff0a8
  852.  
  853.  move.l #null2,$dff0b0
  854.  move.w #100,$dff0b4
  855.  move.w #443,$dff0b6
  856.  move.w #63,$dff0b8
  857.  
  858.  move.l #null4,$dff0c0
  859.  move.w #100,$dff0c4
  860.  move.w #443,$dff0c6
  861.  move.w #63,$dff0c8
  862.  
  863.  move.l #null3,$dff0d0
  864.  move.w #100,$dff0d4
  865.  move.w #443,$dff0d6
  866.  move.w #63,$dff0d8
  867.  
  868.  move.l #tab,a1
  869.  move.w #64,d7
  870.  move.w #0,d6
  871. outerlop
  872.  move.l #pretab,a0
  873.  move.w #255,d5
  874. scaledownlop:
  875.  move.b (a0)+,d0
  876.  ext.w d0
  877.  ext.l d0
  878.  muls d6,d0
  879.  asr.l #6,d0
  880.  move.b d0,(a1)+
  881.  dbra d5,scaledownlop
  882.  addq #1,d6
  883.  dbra d7,outerlop
  884.  
  885.  move.l #$dff000,a6
  886.  
  887.  move.w #$c018,intena(a6)
  888.  
  889.  move.w #$f,dmacon(a6)
  890.  move.w #$820f,dmacon(a6)
  891.  
  892. ; bsr protinit
  893.  
  894. **************************************
  895.  move.w #%110000000000,$dff034
  896. * RMB setup
  897. **************************************
  898.  
  899.  
  900.  bsr FullEnergy
  901.  move.w #63,OldAmmo
  902.  move.w #0,Ammo
  903.  bsr AmmoBar
  904.  move.w #0,OldAmmo
  905.  
  906.  move.w #127,PLR1_energy
  907.  move.w #127,PLR2_energy
  908.  move.b #1,PLR1_GunDamage
  909.  move.b #1,PLR2_GunDamage
  910.  move.w #3,PLR1_GunNoise
  911.  move.w #3,PLR2_GunNoise
  912.  
  913.  move.w #10,PLR1_GunData    ; 10 shots pistol
  914.  st PLR1_GunData+7
  915.  clr.b PLR1_GunData+16+7
  916.  clr.w PLR1_GunData+16
  917.  move.b #0,PLR1_GunSelected
  918.  
  919.  move.w #10,PLR2_GunData    ; 10 shots pistol
  920.  st PLR2_GunData+7
  921.  clr.b PLR2_GunData+16+7
  922.  clr.w PLR2_GunData+16
  923.  move.b #0,PLR2_GunSelected
  924.  
  925. ; move.w #$20,$1dc(a6)
  926.  
  927.  move.w #$0,$dff034
  928.  move.w #0,Conditions
  929.  move.l #KeyMap,a5
  930.  clr.b $45(a5)
  931.  
  932.  move.l #ingame,mt_data
  933.  clr.b UseAllChannels
  934.  
  935. ; cmp.b #'b',Prefsfile+3
  936. ; bne.s .noback
  937. ; jsr mt_init
  938. ;.noback:
  939. ;
  940. ; clr.b CHANNELDATA
  941. ; clr.b CHANNELDATA+8
  942. ; clr.b CHANNELDATA+16
  943. ; clr.b CHANNELDATA+24
  944. ;
  945. ; cmp.b #'b',Prefsfile+3
  946. ; bne.s noreserve
  947. ;
  948. ; st CHANNELDATA
  949. ; st CHANNELDATA+8
  950. ; st CHANNELDATA+16
  951. ; st CHANNELDATA+24
  952. ;noreserve: 
  953.  
  954. ; st CHANNELDATA
  955. ; st CHANNELDATA+8
  956.  
  957.  move.l #bass,pos0LEFT
  958.  move.l #bassend,Samp0endLEFT
  959.  move.l #playerheight,PLR1s_targheight
  960.  move.l #playerheight,PLR1s_height
  961.  move.l #playerheight,PLR2s_targheight
  962.  move.l #playerheight,PLR2s_height
  963.  
  964. ; cmp.b #'n',mors
  965. ; beq.s nohandshake
  966. ;
  967. ; move.b #%11011000,$bfd200
  968. ; move.b #%00010000,$bfd000
  969. ;waitloop:
  970. ; btst.b #4,$bfd000
  971. ; bne.s waitloop
  972. ; move.b #%11000000,$bfd200
  973.  
  974. ;nohandshake:
  975.  st doanything
  976.  
  977. lop: 
  978.  
  979.  st READCONTROLS
  980.  move.l #$dff000,a6
  981.  
  982.  move.w hitcol,d0
  983.  beq.s nofadedownhc
  984.  sub.w #$100,d0
  985.  move.w d0,hitcol
  986.  move.w d0,hitcol2
  987. nofadedownhc:
  988.  
  989.  move.l drawpt,d0
  990.  move.l olddrawpt,drawpt
  991.  move.l d0,olddrawpt
  992.  move.l d0,$dff084
  993.  move.l drawpt,a3
  994.  adda.w #10,a3
  995.  move.l a3,frompt
  996.  add.l #104*4*40,a3
  997.  move.l a3,midpt
  998.  
  999.  cmp.b #'s',mors
  1000.  beq.s nowaitslave
  1001.  
  1002. waitfortop:
  1003.  btst.b #0,intreqrl(a6)
  1004.  beq waitfortop
  1005.  move.w #$1,intreq(a6)
  1006.  move.l #PLR1_GunData,GunData
  1007.  move.b PLR1_GunSelected,GunSelected
  1008.  bra waitmaster
  1009.  
  1010. nowaitslave:
  1011.  move.l #PLR2_GunData,GunData
  1012.  move.b PLR2_GunSelected,GunSelected
  1013. waitmaster:
  1014.  
  1015.  
  1016.  move.l waterpt,a0
  1017.  move.l (a0)+,watertouse
  1018.  cmp.l #endwaterlist,a0
  1019.  blt.s okwat
  1020.  move.l #waterlist,a0
  1021. okwat:
  1022.  move.l a0,waterpt
  1023.  
  1024.  add.w #640,wtan
  1025.  and.w #8191,wtan
  1026.  add.w #1,wateroff
  1027.  and.w #63,wateroff
  1028.  
  1029.  
  1030.  move.l GunData,a6
  1031.  moveq #0,d0
  1032.  move.b GunSelected,d0
  1033.  add.w d0,d0
  1034.  lea (a6,d0.w*8),a6
  1035.  move.w (a6),Ammo
  1036.  
  1037.  cmp.b #'s',mors
  1038.  beq ASlaveShouldWaitOnHisMaster
  1039.  
  1040.  cmp.b #'n',mors
  1041.  bne NotOnePlayer
  1042.  
  1043.  move.w PLR1_energy,Energy
  1044.  move.w FramesToDraw,TempFrames
  1045.  move.w #0,FramesToDraw
  1046.  
  1047.  move.l PLR1s_xoff,p1_xoff
  1048.  move.l PLR1s_zoff,p1_zoff
  1049.  move.l PLR1s_yoff,p1_yoff
  1050.  move.l PLR1s_height,p1_height
  1051.  move.w PLR1s_angpos,p1_angpos
  1052.  move.w PLR1_bobble,p1_bobble
  1053.  move.b PLR1_clicked,p1_clicked
  1054.  move.b PLR1_fire,p1_fire
  1055.  clr.b PLR1_clicked
  1056.  move.b PLR1_SPCTAP,p1_spctap
  1057.  clr.b PLR1_SPCTAP
  1058.  move.b PLR1_Ducked,p1_ducked
  1059.  move.b PLR1_GunSelected,p1_gunselected
  1060.  
  1061.  bsr PLR1_Control
  1062.  
  1063.  move.l PLR1_Roompt,a0
  1064.  move.l ToZoneRoof(a0),SplitHeight
  1065.  move.w p1_xoff,THISPLRxoff
  1066.  move.w p1_zoff,THISPLRzoff
  1067.  
  1068.  bra donetalking
  1069.  
  1070. NotOnePlayer:
  1071.  
  1072.  move.w PLR1_energy,Energy
  1073.  
  1074.  
  1075.  jsr INITSEND
  1076.  jsr SENDLONG
  1077.  move.w FramesToDraw,TempFrames
  1078.  move.w #0,FramesToDraw
  1079.  
  1080.  move.l PLR1s_xoff,p1_xoff
  1081.  move.l PLR1s_zoff,p1_zoff
  1082.  move.l PLR1s_yoff,p1_yoff
  1083.  move.l PLR1s_height,p1_height
  1084.  move.w PLR1s_angpos,p1_angpos
  1085.  move.w PLR1_bobble,p1_bobble
  1086.  move.b PLR1_clicked,p1_clicked
  1087.  clr.b PLR1_clicked
  1088.  move.b PLR1_fire,p1_fire
  1089.  move.b PLR1_SPCTAP,p1_spctap
  1090.  clr.b PLR1_SPCTAP
  1091.  move.b PLR1_Ducked,p1_ducked
  1092.  move.b PLR1_GunSelected,p1_gunselected
  1093.  
  1094.  move.l p1_xoff,d0
  1095.  jsr SENDLONG
  1096.  move.l p1_zoff,d0
  1097.  jsr SENDLONG
  1098.  move.l p1_yoff,d0
  1099.  jsr SENDLONG
  1100.  move.l p1_height,d0
  1101.  jsr SENDLONG
  1102.  move.w p1_angpos,d0
  1103.  swap d0
  1104.  move.w p1_bobble,d0
  1105.  jsr SENDLONG
  1106.  move.w TempFrames,d0
  1107.  swap d0
  1108.  move.b p1_spctap,d0
  1109.  lsl.w #8,d0
  1110.  move.b p1_clicked,d0
  1111.  jsr SENDLONG
  1112.  move.w Rand1,d0
  1113.  swap d0
  1114.  move.b p1_ducked,d0
  1115.  lsl.w #8,d0
  1116.  move.b p1_gunselected,d0
  1117.  jsr SENDLONG
  1118.  move.b p1_fire,d0
  1119.  jsr SENDLAST
  1120.  
  1121.  jsr INITREC
  1122.  jsr RECEIVE
  1123.  
  1124.  move.l BUFFER,p2_xoff
  1125.  move.l BUFFER+4,p2_zoff
  1126.  move.l BUFFER+8,p2_yoff
  1127.  move.l BUFFER+12,p2_height
  1128.  move.w BUFFER+16,p2_angpos
  1129.  move.w BUFFER+18,p2_bobble
  1130.  move.b BUFFER+22,p2_spctap
  1131.  move.b BUFFER+23,p2_clicked
  1132.  move.b BUFFER+26,p2_ducked
  1133.  move.b BUFFER+27,p2_gunselected
  1134.  move.b BUFFER+31,p2_fire
  1135.  
  1136.  bsr PLR2_Control
  1137.  bsr PLR1_Control
  1138.  move.l PLR1_Roompt,a0
  1139.  move.l ToZoneRoof(a0),SplitHeight
  1140.  move.w p1_xoff,THISPLRxoff
  1141.  move.w p1_zoff,THISPLRzoff
  1142.  
  1143.  bra donetalking
  1144.  
  1145. ASlaveShouldWaitOnHisMaster:
  1146.  
  1147.  move.w PLR2_energy,Energy
  1148.  
  1149.  jsr INITREC
  1150.  jsr RECEIVE
  1151.  
  1152.  move.l PLR2s_xoff,p2_xoff
  1153.  move.l PLR2s_zoff,p2_zoff
  1154.  move.l PLR2s_yoff,p2_yoff
  1155.  move.l PLR2s_height,p2_height
  1156.  move.w PLR2s_angpos,p2_angpos
  1157.  move.w PLR2_bobble,p2_bobble
  1158.  move.b PLR2_clicked,p2_clicked
  1159.  clr.b PLR2_clicked
  1160.  move.b PLR2_fire,p2_fire
  1161.  move.b PLR2_SPCTAP,p2_spctap
  1162.  clr.b PLR2_SPCTAP
  1163.  move.b PLR2_Ducked,p2_ducked
  1164.  move.b PLR2_GunSelected,p2_gunselected
  1165.  
  1166.  jsr INITSEND
  1167.  move.l p2_xoff,d0
  1168.  jsr SENDLONG
  1169.  move.l p2_zoff,d0
  1170.  jsr SENDLONG
  1171.  move.l p2_yoff,d0
  1172.  jsr SENDLONG
  1173.  move.l p2_height,d0
  1174.  jsr SENDLONG
  1175.  move.w p2_angpos,d0
  1176.  swap d0
  1177.  move.w p2_bobble,d0
  1178.  jsr SENDLONG 
  1179.  move.b p2_spctap,d0
  1180.  lsl.w #8,d0
  1181.  move.b p2_clicked,d0
  1182.  jsr SENDLONG
  1183.  move.b p2_ducked,d0
  1184.  lsl.w #8,d0
  1185.  move.b p2_gunselected,d0
  1186.  jsr SENDLONG
  1187.  move.b p2_fire,d0
  1188.  jsr SENDLAST
  1189.  
  1190.  move.l BUFFER+4,p1_xoff
  1191.  move.l BUFFER+4+4,p1_zoff
  1192.  move.l BUFFER+4+8,p1_yoff
  1193.  move.l BUFFER+4+12,p1_height
  1194.  move.w BUFFER+4+16,p1_angpos
  1195.  move.w BUFFER+4+18,p1_bobble
  1196.  move.w BUFFER+4+20,TempFrames
  1197.  move.b BUFFER+4+22,p1_spctap
  1198.  move.b BUFFER+4+23,p1_clicked
  1199.  move.b BUFFER+4+26,p1_ducked
  1200.  move.b BUFFER+4+27,p1_gunselected
  1201.  move.w BUFFER+4+24,Rand1
  1202.  move.b BUFFER+4+31,p1_fire
  1203.  
  1204.  bsr PLR1_Control
  1205.  bsr PLR2_Control
  1206.  move.w p2_xoff,THISPLRxoff
  1207.  move.w p2_zoff,THISPLRzoff
  1208.  move.l PLR2_Roompt,a0
  1209.  move.l ToZoneRoof(a0),SplitHeight
  1210.  
  1211. donetalking:
  1212.  
  1213.  move.l #ZoneBrightTable,a1
  1214.  move.l ZoneAdds,a2
  1215.  move.l PLR2_ListOfGraphRooms,a0
  1216.  move.l PLR2_PointsToRotatePtr,a5
  1217.  cmp.b #'s',mors
  1218.  beq.s doallz
  1219.  move.l PLR1_ListOfGraphRooms,a0
  1220.  move.l PLR1_PointsToRotatePtr,a5
  1221.  
  1222. doallz
  1223.  move.w (a0),d0
  1224.  blt.s doneallz
  1225.  add.w #8,a0
  1226.  
  1227.  move.l (a2,d0.w*4),a3
  1228.  add.l #LEVELDATA,a3
  1229.  move.w ToZoneBrightness(a3),d2
  1230.  
  1231.  blt.s justbright
  1232.  move.w d2,d3
  1233.  lsr.w #8,d3
  1234.  tst.b d3
  1235.  beq.s justbright
  1236.  
  1237.  move.l #BrightAnimTable,a4
  1238.  move.w -2(a4,d3.w*2),d2
  1239.  
  1240. justbright:
  1241.  move.w d2,(a1,d0.w*4)
  1242.  
  1243.  move.w ToUpperBrightness(a3),d2
  1244.  
  1245.  blt.s justbright2
  1246.  move.w d2,d3
  1247.  lsr.w #8,d3
  1248.  tst.b d3
  1249.  beq.s justbright2
  1250.  
  1251.  move.l #BrightAnimTable,a4
  1252.  move.w -2(a4,d3.w*2),d2
  1253.  
  1254. justbright2:
  1255.  move.w d2,2(a1,d0.w*4)
  1256.  
  1257.  bra doallz
  1258.  
  1259. doneallz:
  1260.  
  1261.  
  1262.  move.l PointBrights,a2
  1263.  move.l #CurrentPointBrights,a3
  1264. justtheone:
  1265.  move.w (a5)+,d0
  1266.  blt.s whythehell
  1267.  move.w (a2,d0.w*2),d2
  1268.  
  1269.  tst.b d2
  1270.  blt.s .justbright
  1271.  move.w d2,d3
  1272.  lsr.w #8,d3
  1273.  tst.b d3
  1274.  beq.s .justbright
  1275.  
  1276.  move.w d3,d4
  1277.  and.w #$f,d3
  1278.  lsr.w #4,d4
  1279.  add.w #1,d4
  1280.  
  1281.  move.l #BrightAnimTable,a0
  1282.  move.w -2(a0,d3.w*2),d3
  1283.  ext.w d2
  1284.  sub.w d2,d3
  1285.  muls d4,d3
  1286.  asr.w #4,d3
  1287.  add.w d3,d2
  1288.  
  1289. .justbright:
  1290.  ext.w d2
  1291.  
  1292.  move.w d2,(a3,d0.w*2)
  1293.  
  1294.  bra.s justtheone
  1295.  
  1296. whythehell:
  1297.  
  1298.  move.l PLR1_Obj,a0
  1299.  move.b #5,16(a0)
  1300.  move.l PLR2_Obj,a0
  1301.  move.b #11,16(a0)
  1302.  
  1303. ******************************************
  1304.  jsr objmoveanim
  1305.  bsr EnergyBar
  1306.  bsr AmmoBar
  1307. ******************************************
  1308.  
  1309.  
  1310.  cmp.b #'s',mors
  1311.  beq.s ImPlayer2OhYesIAm
  1312.  bsr USEPLR1
  1313.  bra IWasPlayer1
  1314.  
  1315. ImPlayer2OhYesIAm:
  1316.  bsr USEPLR2
  1317. IWasPlayer1:
  1318.  
  1319.  
  1320.  cmp.b #'s',mors
  1321.  beq drawplayer2
  1322.  
  1323.  
  1324.  move.w #0,scaleval
  1325.  move.l PLR1_xoff,xoff
  1326.  move.l PLR1_yoff,yoff
  1327.  move.l PLR1_zoff,zoff
  1328.  move.w PLR1_angpos,angpos
  1329.  move.w PLR1_cosval,cosval
  1330.  move.w PLR1_sinval,sinval
  1331.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1332.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1333.  move.l PLR1_Roompt,Roompt
  1334.  
  1335.  move.w #0,leftclip
  1336.  move.w #96,rightclip
  1337.  move.w #0,deftopclip
  1338.  move.w #79,defbotclip
  1339.  move.w #0,topclip
  1340.  move.w #79,botclip
  1341. ; sub.l #10*104*4,frompt
  1342. ; sub.l #10*104*4,midpt
  1343.  
  1344. * Subroom loop
  1345.  
  1346.  bsr DrawDisplay 
  1347.  
  1348.  
  1349.  
  1350.  bra nodrawp2
  1351.  
  1352. drawplayer2
  1353.  
  1354.  move.w #0,scaleval
  1355.  move.l PLR2_xoff,xoff
  1356.  move.l PLR2_yoff,yoff
  1357.  move.l PLR2_zoff,zoff
  1358.  move.w PLR2_angpos,angpos
  1359.  move.w PLR2_cosval,cosval
  1360.  move.w PLR2_sinval,sinval
  1361.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1362.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1363.  move.l PLR2_Roompt,Roompt
  1364.  
  1365.  move.w #0,leftclip
  1366.  move.w #96,rightclip
  1367.  move.w #0,deftopclip
  1368.  move.w #79,defbotclip
  1369.  move.w #0,topclip
  1370.  move.w #79,botclip
  1371.  
  1372.  bsr DrawDisplay
  1373.  
  1374. nodrawp2:
  1375.  
  1376.  move.l PLR2_Roompt,a0
  1377.  move.l #WorkSpace,a1
  1378.  clr.l (a1)
  1379.  clr.l 4(a1)
  1380.  clr.l 8(a1)
  1381.  clr.l 12(a1)
  1382.  clr.l 16(a1)
  1383.  clr.l 20(a1)
  1384.  clr.l 24(a1)
  1385.  clr.l 28(a1)
  1386.  
  1387.  cmp.b #'n',mors
  1388.  beq.s plr1only
  1389.  
  1390.  lea ToListOfGraph(a0),a0
  1391. .doallrooms:
  1392.  move.w (a0),d0
  1393.  blt.s .allroomsdone
  1394.  addq #8,a0
  1395.  move.w d0,d1
  1396.  asr.w #3,d0
  1397.  bset d1,(a1,d0.w)
  1398.  bra .doallrooms
  1399. .allroomsdone:
  1400.  
  1401. plr1only:
  1402.  
  1403.  move.l PLR1_Roompt,a0
  1404.  lea ToListOfGraph(a0),a0
  1405. .doallrooms2:
  1406.  move.w (a0),d0
  1407.  blt.s .allroomsdone2
  1408.  addq #8,a0
  1409.  move.w d0,d1
  1410.  asr.w #3,d0
  1411.  bset d1,(a1,d0.w)
  1412.  bra .doallrooms2
  1413. .allroomsdone2:
  1414.  
  1415.  move.l ObjectData,a0
  1416.  sub.w #64,a0
  1417. .doallobs:
  1418.  add.w #64,a0
  1419.  move.w (a0),d0
  1420.  blt.s .allobsdone
  1421.  move.w 12(a0),d0
  1422.  blt.s .doallobs
  1423.  move.w d0,d1
  1424.  asr.w #3,d0
  1425.  btst d1,(a1,d0.w)
  1426.  beq.s .doallobs
  1427.  st worry(a0)
  1428.  bra.s .doallobs
  1429. .allobsdone:
  1430.  
  1431.  
  1432.  
  1433. ; move.l #brightentab,a0
  1434. ; move.l frompt,a3
  1435. ; adda.w #(4*33)+(104*4*20),a3
  1436. ; move.w #20,d7
  1437. ; move.w #20,d6
  1438. ;horl:
  1439. ; move.w d6,d5
  1440. ; move.l a3,a1
  1441. ;vertl
  1442. ; move.w (a1),d0
  1443. ; move.w (a0,d0.w*2),(a1)
  1444. ; addq #4,a1
  1445. ; dbra d5,vertl
  1446. ; adda.w #104*4,a3
  1447. ; dbra d7,horl
  1448.  
  1449.  move.l #$dff000,a6
  1450.  
  1451. ; move.w #$300,col0(a6)
  1452.  
  1453.  move.l #KeyMap,a5
  1454.  tst.b $45(a5)
  1455.  beq.s noend
  1456.  
  1457.  bra endnomusic
  1458. noend:
  1459.  
  1460.  tst.w Energy
  1461.  bgt .noend
  1462.  cmp.b #'i',option+4
  1463.  bne end
  1464.  move.w #10,Energy
  1465. .noend:
  1466.  
  1467.  move.l SwitchData,a0
  1468.  tst.b 24+8(a0)
  1469.  bne end
  1470.   
  1471.  JSR STOPTIMER
  1472.  
  1473.  bra lop
  1474.  
  1475. ***************************************************************************
  1476. ***************************************************************************
  1477. ****************** End of Main Loop here ********************************** 
  1478. ***************************************************************************
  1479. ***************************************************************************
  1480.  
  1481. READCONTROLS: dc.w 0
  1482.  
  1483. USEPLR1:
  1484.  
  1485. ***********************************
  1486.  
  1487.  move.l PLR1_Obj,a0 
  1488.  move.l ObjectPoints,a1
  1489.  move.l #ObjRotated,a2
  1490.  move.w (a0),d0
  1491.  move.l PLR1_xoff,(a1,d0.w*8)
  1492.  move.l PLR1_zoff,4(a1,d0.w*8)
  1493.  move.l PLR1_Roompt,a1
  1494.  
  1495.  move.b damagetaken(a0),d2
  1496.  beq .notbeenshot
  1497.  move.w #$f00,hitcol
  1498.  move.w #$f00,hitcol2
  1499.  ext.w d2
  1500.  sub.w d2,PLR1_energy
  1501.  movem.l d0-d7/a0-a6,-(a7)
  1502.  move.w #19,Samplenum
  1503.  clr.b notifplaying
  1504.  move.w #0,Noisex
  1505.  move.w #0,Noisez
  1506.  move.w #100,Noisevol
  1507.  jsr MakeSomeNoise
  1508.  
  1509.  movem.l (a7)+,d0-d7/a0-a6
  1510.  
  1511. .notbeenshot
  1512.  move.b #0,damagetaken(a0)
  1513.  move.b PLR1_energy+1,numlives(a0)
  1514.  
  1515.  move.b PLR1_StoodInTop,ObjInTop(a0)
  1516.  
  1517.  move.w (a1),12(a0)
  1518.  move.w (a1),d2
  1519.  move.l #ZoneBrightTable,a1
  1520.  move.l (a1,d2.w*4),d2
  1521.  tst.b PLR1_StoodInTop
  1522.  bne.s .okinbott
  1523.  swap d2
  1524. .okinbott:
  1525.  
  1526.  move.w d2,2(a0)
  1527.  
  1528.  move.l PLR1_yoff,d0
  1529.  move.l PLR1_height,d1
  1530.  asr.l #1,d1
  1531.  add.l d1,d0
  1532.  asr.l #7,d0
  1533.  move.w d0,4(a0)
  1534.  
  1535. ***********************************
  1536.  
  1537.  move.l PLR2_Obj,a0 
  1538.  
  1539.  move.w PLR2_angpos,d0
  1540.  and.w #8190,d0
  1541.  move.w d0,Facing(a0)
  1542.  
  1543.  jsr ViewpointToDraw
  1544.  asl.w #2,d0
  1545.  moveq #0,d1
  1546.  move.b p2_bobble,d1
  1547.  not.b d1
  1548.  lsr.b #3,d1
  1549.  and.b #$3,d1
  1550.  add.w d1,d0
  1551.  move.w d0,10(a0)
  1552.  move.w #10,8(a0)
  1553.  
  1554.  move.l ObjectPoints,a1
  1555.  move.l #ObjRotated,a2
  1556.  move.w (a0),d0
  1557.  move.l PLR2_xoff,(a1,d0.w*8)
  1558.  move.l PLR2_zoff,4(a1,d0.w*8)
  1559.  move.l PLR2_Roompt,a1
  1560.  
  1561.  move.b damagetaken(a0),d2
  1562.  beq .notbeenshot2
  1563.  ext.w d2
  1564.  sub.w d2,PLR2_energy
  1565. .notbeenshot2
  1566.  move.b #0,damagetaken(a0)
  1567.  move.b PLR2_energy+1,numlives(a0)
  1568.  
  1569.  move.b PLR2_StoodInTop,ObjInTop(a0)
  1570.  
  1571.  move.w (a1),12(a0)
  1572.  move.w (a1),d2
  1573.  move.l #ZoneBrightTable,a1
  1574.  move.l (a1,d2.w*4),d2
  1575.  tst.b PLR2_StoodInTop
  1576.  bne.s .okinbott2
  1577.  swap d2
  1578. .okinbott2:
  1579.  
  1580.  move.w d2,2(a0)
  1581.  
  1582.  move.l PLR2_yoff,d0
  1583.  move.l PLR2_height,d1
  1584.  asr.l #1,d1
  1585.  add.l d1,d0
  1586.  asr.l #7,d0
  1587.  move.w d0,4(a0)
  1588.  
  1589. **********************************
  1590.  
  1591.  move.l PLR1_Obj,a0
  1592.  move.w PLR1_sinval,d4
  1593.  muls #100,d4
  1594.  move.w PLR1_cosval,d5
  1595.  muls #100,d5
  1596.  
  1597.  move.b PLR1_GunSelected,d0
  1598.  asl.b #2,d0
  1599.  add.b PLR1_GunFrame,d0
  1600.  move.b d0,11+128(a0)
  1601.  
  1602.  tst.b PLR1_GunFrame
  1603.  beq.s .noless
  1604.  subq.b #1,PLR1_GunFrame
  1605. .noless: 
  1606.  
  1607.  move.l ObjectPoints,a1
  1608.  move.w 128(a0),d0
  1609.  move.l PLR1_xoff,d1
  1610.  add.l d4,d1
  1611.  move.l d1,(a1,d0.w*8)
  1612.  move.l PLR1_zoff,d1
  1613.  add.l d5,d1
  1614.  move.l d1,4(a1,d0.w*8)
  1615.  move.w 4(a0),d0
  1616.  move.l PLR1_height,d1
  1617.  asr.l #8,d1
  1618.  sub.w d1,d0
  1619.  
  1620.  add.w #16,d0
  1621.  move.w d0,4+128(a0)
  1622.  move.w #$2010,6+128(a0)
  1623.  
  1624.  move.w 12(a0),12+128(a0)
  1625.  
  1626.  move.w 2(a0),2+128(a0)
  1627.  
  1628.  rts
  1629.  
  1630. ***************************************************
  1631. **************************************************
  1632.  
  1633. USEPLR2:
  1634.  
  1635. ***********************************
  1636.  
  1637.  move.l PLR2_Obj,a0 
  1638.  move.l ObjectPoints,a1
  1639.  move.l #ObjRotated,a2
  1640.  move.w (a0),d0
  1641.  move.l PLR2_xoff,(a1,d0.w*8)
  1642.  move.l PLR2_zoff,4(a1,d0.w*8)
  1643.  move.l PLR2_Roompt,a1
  1644.  
  1645.  move.b damagetaken(a0),d2
  1646.  beq .notbeenshot
  1647.  move.w #$f00,hitcol
  1648.  move.w #$f00,hitcol2
  1649.  ext.w d2
  1650.  sub.w d2,PLR2_energy
  1651.  movem.l d0-d7/a0-a6,-(a7)
  1652.  move.w #19,Samplenum
  1653.  clr.b notifplaying
  1654.  move.w #0,Noisex
  1655.  move.w #0,Noisez
  1656.  move.w #100,Noisevol
  1657.  jsr MakeSomeNoise
  1658.  
  1659.  movem.l (a7)+,d0-d7/a0-a6
  1660.  
  1661. .notbeenshot
  1662.  move.b #0,damagetaken(a0)
  1663.  move.b PLR2_energy+1,numlives(a0)
  1664.  
  1665.  move.b PLR2_StoodInTop,ObjInTop(a0)
  1666.  
  1667.  move.w (a1),12(a0)
  1668.  move.w (a1),d2
  1669.  move.l #ZoneBrightTable,a1
  1670.  move.l (a1,d2.w*4),d2
  1671.  tst.b PLR1_StoodInTop
  1672.  bne.s .okinbott
  1673.  swap d2
  1674. .okinbott:
  1675.  
  1676.  move.w d2,2(a0)
  1677.  
  1678.  move.l PLR2_yoff,d0
  1679.  move.l PLR2_height,d1
  1680.  asr.l #1,d1
  1681.  add.l d1,d0
  1682.  asr.l #7,d0
  1683.  move.w d0,4(a0)
  1684.  
  1685. ***********************************
  1686.  
  1687.  move.l PLR1_Obj,a0 
  1688.  
  1689.  move.w PLR1_angpos,d0
  1690.  and.w #8190,d0
  1691.  move.w d0,Facing(a0)
  1692.  
  1693.  jsr ViewpointToDraw
  1694.  asl.w #2,d0
  1695.  moveq #0,d1
  1696.  move.b p1_bobble,d1
  1697.  not.b d1
  1698.  lsr.b #3,d1
  1699.  and.b #$3,d1
  1700.  add.w d1,d0
  1701.  move.w d0,10(a0)
  1702.  move.w #10,8(a0)
  1703.  
  1704.  
  1705.  move.l ObjectPoints,a1
  1706.  move.l #ObjRotated,a2
  1707.  move.w (a0),d0
  1708.  move.l PLR1_xoff,(a1,d0.w*8)
  1709.  move.l PLR1_zoff,4(a1,d0.w*8)
  1710.  move.l PLR1_Roompt,a1
  1711.  
  1712.  move.b damagetaken(a0),d2
  1713.  beq .notbeenshot2
  1714.  ext.w d2
  1715.  sub.w d2,PLR1_energy
  1716. .notbeenshot2
  1717.  move.b #0,damagetaken(a0)
  1718.  move.b PLR1_energy+1,numlives(a0)
  1719.  
  1720.  move.b PLR1_StoodInTop,ObjInTop(a0)
  1721.  
  1722.  move.w (a1),12(a0)
  1723.  move.w (a1),d2
  1724.  move.l #ZoneBrightTable,a1
  1725.  move.l (a1,d2.w*4),d2
  1726.  tst.b PLR1_StoodInTop
  1727.  bne.s .okinbott2
  1728.  swap d2
  1729. .okinbott2:
  1730.  
  1731.  move.w d2,2(a0)
  1732.  
  1733.  move.l PLR1_yoff,d0
  1734.  move.l PLR1_height,d1
  1735.  asr.l #1,d1
  1736.  add.l d1,d0
  1737.  asr.l #7,d0
  1738.  move.w d0,4(a0)
  1739.  
  1740. **********************************
  1741.  
  1742.  move.l PLR2_Obj,a0
  1743.  move.w PLR2_sinval,d4
  1744.  muls #100,d4
  1745.  move.w PLR2_cosval,d5
  1746.  muls #100,d5
  1747.  
  1748.  move.b PLR2_GunSelected,d0
  1749.  asl.b #2,d0
  1750.  add.b PLR2_GunFrame,d0
  1751.  move.b d0,11+64(a0)
  1752.  
  1753.  tst.b PLR2_GunFrame
  1754.  beq.s .noless
  1755.  subq.b #1,PLR2_GunFrame
  1756. .noless: 
  1757.  
  1758.  move.l ObjectPoints,a1
  1759.  move.w 64(a0),d0
  1760.  move.l PLR2_xoff,d1
  1761.  add.l d4,d1
  1762.  move.l d1,(a1,d0.w*8)
  1763.  move.l PLR2_zoff,d1
  1764.  add.l d5,d1
  1765.  move.l d1,4(a1,d0.w*8)
  1766.  move.w 4(a0),d0
  1767.  move.l PLR2_height,d1
  1768.  asr.l #8,d1
  1769.  sub.w d1,d0
  1770.  add.w #16,d0
  1771.  move.w d0,4+64(a0)
  1772.  move.w #$2010,6+64(a0)
  1773.  
  1774.  move.w 12(a0),12+64(a0)
  1775.  
  1776.  move.w 2(a0),2+64(a0)
  1777.  
  1778.  rts
  1779.  
  1780.  
  1781. GunSelected: dc.b 0
  1782.  even
  1783.  
  1784. GunData: dc.l 0
  1785.  
  1786. PLR1_GunData:
  1787. ; 0=Pistol 1=Big Gun
  1788. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  1789.  
  1790. ; VISIBLE/INSTANT (0/FF)
  1791. ; damage,gotgun(b)
  1792. ; Delay (w), Lifetime of bullet (w)
  1793. ; Click or hold down (0,1)
  1794.  
  1795.  dc.w 0
  1796.  dc.b 1,3
  1797.  dc.b 20
  1798.  dc.b -1
  1799.  dc.b 1,$ff
  1800.  dc.w 5,-1,0,0
  1801.  
  1802.  dc.w 0
  1803.  dc.b 1,1
  1804.  dc.b 40
  1805.  dc.b 0
  1806.  dc.b 4,0
  1807.  dc.w 10,-1,0,0
  1808.  
  1809.  dc.w 0
  1810.  dc.b 1,9
  1811.  dc.b 5
  1812.  dc.b 0
  1813.  dc.b 10,0
  1814.  dc.w 50,-1,0,0
  1815.  
  1816.  dc.w 40
  1817.  dc.b 1,3
  1818.  dc.b 40
  1819.  dc.b 0
  1820.  dc.b 4,$FF
  1821.  dc.w 0,10,1,0
  1822.  
  1823. PLR2_GunData:
  1824. ; 0=Pistol 1=Big Gun
  1825. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  1826.  
  1827. ; VISIBLE/INSTANT (0/FF)
  1828. ; damage,gotgun(b)
  1829. ; Delay (w)
  1830.  
  1831.  dc.w 0
  1832.  dc.b 1,3
  1833.  dc.b 20
  1834.  dc.b -1
  1835.  dc.b 1,$ff
  1836.  dc.w 5,0,0,0
  1837.  
  1838.  dc.w 0
  1839.  dc.b 1,1
  1840.  dc.b 40
  1841.  dc.b 0
  1842.  dc.b 4,0
  1843.  dc.w 10,0,0,0
  1844.  
  1845.  dc.w 0
  1846.  dc.b 1,9
  1847.  dc.b 5
  1848.  dc.b 0
  1849.  dc.b 10,0
  1850.  dc.w 50,0,0,0
  1851.  
  1852. protA: dc.w 0
  1853.  
  1854. Path:
  1855. ; incbin "testpath"
  1856. endpath:
  1857. pathpt: dc.l Path
  1858.  
  1859.  
  1860. PLR1KEYS: dc.b 0
  1861. PLR1PATH: dc.b 0
  1862. PLR1MOUSE: dc.b -1
  1863. PLR1JOY: dc.b 0
  1864. PLR2KEYS: dc.b 0
  1865. PLR2PATH: dc.b 0
  1866. PLR2MOUSE: dc.b -1
  1867. PLR2JOY: dc.b 0
  1868.  
  1869.  even
  1870.  
  1871. PLR1_bobble: dc.w 0
  1872. PLR2_bobble: dc.w 0
  1873. xwobble: dc.l 0
  1874. xwobxoff: dc.w 0
  1875. xwobzoff: dc.w 0
  1876.  
  1877. PLR1_Control:
  1878.  
  1879. ; Take a snapshot of everything.
  1880.  
  1881.  move.l PLR1_xoff,d2
  1882.  move.l d2,PLR1_oldxoff
  1883.  move.l d2,oldx
  1884.  move.l PLR1_zoff,d3
  1885.  move.l d3,PLR1_oldzoff
  1886.  move.l d3,oldz
  1887.  move.l p1_xoff,d0
  1888.  move.l d0,PLR1_xoff
  1889.  move.l d0,newx
  1890.  move.l p1_zoff,d1
  1891.  move.l d1,newz
  1892.  move.l d1,PLR1_zoff
  1893.  
  1894.  move.l p1_height,PLR1_height
  1895.  
  1896.  sub.l d2,d0
  1897.  sub.l d3,d1
  1898.  move.l d0,xdiff
  1899.  move.l d1,zdiff
  1900.  move.w p1_angpos,d0
  1901.  move.w d0,PLR1_angpos
  1902.  
  1903.  move.l #SineTable,a1
  1904.  move.w (a1,d0.w),PLR1_sinval
  1905.  add.w #2048,d0
  1906.  and.w #8190,d0
  1907.  move.w (a1,d0.w),PLR1_cosval
  1908.  
  1909.  move.l p1_yoff,d0
  1910.  move.w p1_bobble,d1
  1911.  move.w (a1,d1.w),d1
  1912.  move.w d1,d3
  1913.  ble.s notnegative
  1914.  neg.w d1
  1915. notnegative:
  1916.  add.w #16384,d1
  1917.  asr.w #5,d1
  1918.  add.w d1,d1
  1919.  ext.l d1
  1920.  add.l d1,d0
  1921.  
  1922.  asr.w #6,d3
  1923.  ext.l d3
  1924.  move.l d3,xwobble
  1925.  move.w PLR1_sinval,d1
  1926.  muls d3,d1
  1927.  move.w PLR1_cosval,d2
  1928.  muls d3,d2
  1929.  swap d1
  1930.  swap d2
  1931.  asr.w #7,d1
  1932.  move.w d1,xwobxoff
  1933.  asr.w #7,d2
  1934.  neg.w d2
  1935.  move.w d2,xwobzoff
  1936.  
  1937.  
  1938.  move.l d0,PLR1_yoff
  1939.  move.l d0,newy
  1940.  move.l d0,oldy
  1941.  move.l PLR1_height,thingheight
  1942.  
  1943.  move.l #40*256,StepUpVal
  1944.  tst.b PLR1_Ducked
  1945.  beq.s .okbigstep
  1946.  move.l #10*256,StepUpVal
  1947. .okbigstep:
  1948.  
  1949.  move.l #$1000000,StepDownVal
  1950.  
  1951.  move.l PLR1_Roompt,objroom
  1952.  move.w #%100000000,wallflags
  1953.  move.b PLR1_StoodInTop,StoodInTop
  1954.  
  1955.  move.w #%110111000001,CollideFlags
  1956.  
  1957.  bsr Collision
  1958.  tst.b hitwall
  1959.  beq.s .nothitanything
  1960.  move.w oldx,PLR1_xoff
  1961.  move.w oldz,PLR1_zoff
  1962.  move.l PLR1_xoff,PLR1s_xoff
  1963.  move.l PLR1_zoff,PLR1s_zoff
  1964.  bra .cantmove
  1965.  
  1966. .nothitanything:
  1967.  
  1968.  bsr MoveObject
  1969.  move.b StoodInTop,PLR1_StoodInTop
  1970.  move.l objroom,PLR1_Roompt
  1971.  move.w newx,PLR1_xoff
  1972.  move.w newz,PLR1_zoff
  1973.  move.l PLR1_xoff,PLR1s_xoff
  1974.  move.l PLR1_zoff,PLR1s_zoff
  1975.  
  1976. .cantmove:
  1977.  
  1978.  move.l PLR1_Roompt,a0
  1979.  
  1980.  move.l ToZoneFloor(a0),d0
  1981.  tst.b PLR1_StoodInTop
  1982.  beq.s notintop
  1983.  move.l ToUpperFloor(a0),d0
  1984. notintop:
  1985.  
  1986.  adda.w #ToZonePts,a0
  1987.  sub.l PLR1_height,d0
  1988.  move.l d0,PLR1s_tyoff
  1989.  
  1990. ; move.l (a0),a0        ; jump to viewpoint list
  1991.  * A0 is pointing at a pointer to list of points to rotate
  1992.  move.w (a0)+,d1
  1993.  ext.l d1
  1994.  add.l PLR1_Roompt,d1
  1995.  move.l d1,PLR1_PointsToRotatePtr
  1996.  tst.w (a0)+
  1997.  beq.s nobackgraphics
  1998.  move.l a0,-(a7)
  1999.  jsr putinbackdrop 
  2000.  move.l (a7)+,a0
  2001. nobackgraphics:
  2002.  move.l a0,PLR1_ListOfGraphRooms
  2003.  
  2004. *****************************************************
  2005.  
  2006.  rts
  2007.  
  2008. PLR2_Control:
  2009.  
  2010. ; Take a snapshot of everything.
  2011.  
  2012.  move.l PLR2_xoff,d2
  2013.  move.l d2,PLR2_oldxoff
  2014.  move.l d2,oldx
  2015.  move.l PLR2_zoff,d3
  2016.  move.l d3,PLR2_oldzoff
  2017.  move.l d3,oldz
  2018.  move.l p2_xoff,d0
  2019.  move.l d0,PLR2_xoff
  2020.  move.l d0,newx
  2021.  move.l p2_zoff,d1
  2022.  move.l d1,newz
  2023.  move.l d1,PLR2_zoff
  2024.  
  2025.  move.l p2_height,PLR2_height
  2026.  
  2027.  sub.l d2,d0
  2028.  sub.l d3,d1
  2029.  move.l d0,xdiff
  2030.  move.l d1,zdiff
  2031.  move.w p2_angpos,d0
  2032.  move.w d0,PLR2_angpos
  2033.  
  2034.  move.l #SineTable,a1
  2035.  move.w (a1,d0.w),PLR2_sinval
  2036.  add.w #2048,d0
  2037.  and.w #8190,d0
  2038.  move.w (a1,d0.w),PLR2_cosval
  2039.  
  2040.  move.l p2_yoff,d0
  2041.  move.w p2_bobble,d1
  2042.  move.w (a1,d1.w),d1
  2043.  move.w d1,d3
  2044.  ble.s .notnegative
  2045.  neg.w d1
  2046. .notnegative:
  2047.  add.w #16384,d1
  2048.  asr.w #5,d1
  2049.  add.w d1,d1
  2050.  ext.l d1
  2051.  add.l d1,d0
  2052.  
  2053.  asr.w #6,d3
  2054.  ext.l d3
  2055.  move.l d3,xwobble
  2056.  move.w PLR2_sinval,d1
  2057.  muls d3,d1
  2058.  move.w PLR2_cosval,d2
  2059.  muls d3,d2
  2060.  swap d1
  2061.  swap d2
  2062.  asr.w #7,d1
  2063.  move.w d1,xwobxoff
  2064.  asr.w #7,d2
  2065.  neg.w d2
  2066.  move.w d2,xwobzoff
  2067.  
  2068.  
  2069.  move.l d0,PLR2_yoff
  2070.  move.l d0,newy
  2071.  move.l d0,oldy
  2072.  move.l PLR2_height,thingheight
  2073.  move.l #40*256,StepUpVal
  2074.  tst.b PLR2_Ducked
  2075.  beq.s .okbigstep
  2076.  move.l #10*256,StepUpVal
  2077. .okbigstep:
  2078.  
  2079.  
  2080.  move.l #$1000000,StepDownVal
  2081.  
  2082.  move.l PLR2_Roompt,objroom
  2083.  move.w #%100000000000,wallflags
  2084.  move.b PLR2_StoodInTop,StoodInTop
  2085.  
  2086.  move.w #%010111100001,CollideFlags
  2087.  
  2088.  bsr Collision
  2089.  tst.b hitwall
  2090.  beq.s .nothitanything
  2091.  move.w oldx,PLR2_xoff
  2092.  move.w oldz,PLR2_zoff
  2093.  move.l PLR2_xoff,PLR2s_xoff
  2094.  move.l PLR2_zoff,PLR2s_zoff
  2095.  bra .cantmove
  2096. .nothitanything:
  2097.  
  2098.  bsr MoveObject
  2099.  move.b StoodInTop,PLR2_StoodInTop
  2100.  move.w #0,wallflags
  2101.  move.l objroom,PLR2_Roompt
  2102.  move.w newx,PLR2_xoff
  2103.  move.w newz,PLR2_zoff
  2104.  move.l PLR2_xoff,PLR2s_xoff
  2105.  move.l PLR2_zoff,PLR2s_zoff
  2106.  
  2107. .cantmove
  2108.  
  2109.  move.l PLR2_Roompt,a0
  2110.  
  2111.  move.l ToZoneFloor(a0),d0
  2112.  tst.b PLR2_StoodInTop
  2113.  beq.s .notintop
  2114.  move.l ToUpperFloor(a0),d0
  2115. .notintop:
  2116.  
  2117.  
  2118.  adda.w #ToZonePts,a0
  2119.  sub.l PLR2_height,d0
  2120.  move.l d0,PLR2s_tyoff
  2121.  
  2122. ; move.l (a0),a0        ; jump to viewpoint list
  2123.  * A0 is pointing at a pointer to list of points to rotate
  2124.  move.w (a0)+,d1
  2125.  ext.l d1
  2126.  add.l PLR2_Roompt,d1
  2127.  move.l d1,PLR2_PointsToRotatePtr
  2128.  tst.w (a0)+
  2129.  beq.s .nobackgraphics
  2130.  move.l a0,-(a7)
  2131.  jsr putinbackdrop 
  2132.  move.l (a7)+,a0
  2133. .nobackgraphics:
  2134.  move.l a0,PLR2_ListOfGraphRooms
  2135.  
  2136. *****************************************************
  2137.  
  2138.  rts
  2139.  
  2140.  
  2141. KeyMap: ds.b 256
  2142.  
  2143.  
  2144. DrawDisplay:
  2145.  
  2146.  move.l #SineTable,a0
  2147.  move.w angpos,d0
  2148.  move.w (a0,d0.w),d6
  2149.  adda.w #2048,a0
  2150.  move.w (a0,d0.w),d7
  2151.  move.w d6,sinval
  2152.  move.w d7,cosval
  2153.  
  2154.  move.l yoff,d0
  2155.  asr.l #8,d0
  2156.  move.w d0,d1
  2157.  add.w #256-32,d1
  2158.  and.w #255,d1
  2159.  move.w d1,wallyoff
  2160.  asl.w #2,d0
  2161.  move.w d0,flooryoff
  2162.  
  2163.  move.w xoff,d6
  2164.  move.w d6,d3
  2165.  asr.w #1,d3
  2166.  add.w d3,d6
  2167.  asr.w #1,d6
  2168.  move.w d6,xoff34
  2169.  
  2170.  move.w zoff,d6
  2171.  move.w d6,d3
  2172.  asr.w #1,d3
  2173.  add.w d3,d6
  2174.  asr.w #1,d6
  2175.  move.w d6,zoff34
  2176.  
  2177.  bsr RotateLevelPts
  2178.  bsr RotateObjectPts
  2179.  bsr OrderZones
  2180.  bsr CalcPLR1InLine
  2181.  cmp.b #'n',mors
  2182.  bne.s doplr2too
  2183.  move.l PLR2_Obj,a0
  2184.  move.w #-1,12(a0)
  2185.  bra noplr2either
  2186.  
  2187. doplr2too:
  2188.  bsr CalcPLR2InLine
  2189. noplr2either:
  2190.  
  2191.  move.l ListOfGraphRooms,a0
  2192.  
  2193.  move.l endoflist,a0
  2194. subroomloop:
  2195.  move.w -(a0),d7
  2196.  blt jumpoutofrooms
  2197.  
  2198. ; bsr setlrclip
  2199. ; move.w leftclip,d0
  2200. ; cmp.w rightclip,d0
  2201. ; bge subroomloop
  2202.  move.l a0,-(a7)
  2203.  
  2204.  move.l ZoneAdds,a0
  2205.  move.l (a0,d7.w*4),a0
  2206.  add.l #LEVELDATA,a0
  2207.  move.l ToZoneRoof(a0),SplitHeight
  2208.  
  2209.  move.l ZoneGraphAdds,a0
  2210.  move.l 4(a0,d7.w*8),a2
  2211.  move.l (a0,d7.w*8),a0
  2212.  
  2213.  add.l #LEVELGRAPHICS,a0
  2214.  add.l #LEVELGRAPHICS,a2
  2215.  move.l a2,ThisRoomToDraw+4
  2216.  move.l a0,ThisRoomToDraw
  2217.  
  2218.  move.l ListOfGraphRooms,a1
  2219.  
  2220. finditit:
  2221.  tst.w (a1)
  2222.  blt nomoretodoatall
  2223.  cmp.w (a1),d7
  2224.  beq outoffind
  2225.  adda.w #8,a1
  2226.  bra finditit
  2227.  
  2228. outoffind:
  2229.  
  2230.  move.l a1,-(a7)
  2231.  
  2232.  move.w #0,leftclip
  2233.  move.w #96,rightclip
  2234.  moveq #0,d7
  2235.  move.w 2(a1),d7
  2236.  blt.s outofrcliplop
  2237.  move.l #LEVELCLIPS,a0
  2238.  lea (a0,d7.l*2),a0
  2239.  
  2240.  tst.w (a0)
  2241.  blt outoflcliplop
  2242.  
  2243.  bsr NEWsetlclip
  2244.  
  2245. intolcliplop:        ; clips
  2246.  tst.w (a0)
  2247.  blt outoflcliplop
  2248.  
  2249.  bsr NEWsetlclip 
  2250.  bra intolcliplop
  2251.  
  2252. outoflcliplop:
  2253.  
  2254.  addq #2,a0
  2255.  
  2256.  tst.w (a0)
  2257.  blt outofrcliplop
  2258.  
  2259.  bsr NEWsetrclip
  2260.  
  2261. intorcliplop:        ; clips
  2262.  tst.w (a0)
  2263.  blt outofrcliplop
  2264.  
  2265.  bsr NEWsetrclip 
  2266.  bra intorcliplop
  2267.  
  2268. outofrcliplop:
  2269.  
  2270.  move.w leftclip,d0
  2271.  cmp.w #95,d0
  2272.  bge dontbothercantseeit
  2273.  move.w rightclip,d1
  2274.  blt dontbothercantseeit
  2275.  cmp.w d1,d0
  2276.  bge dontbothercantseeit
  2277.  
  2278.  move.l yoff,d0
  2279.  cmp.l SplitHeight,d0
  2280.  blt.s botfirst
  2281.  
  2282.  move.l ThisRoomToDraw+4,a0
  2283.  cmp.l #LEVELGRAPHICS,a0
  2284.  beq.s noupperroom
  2285.  st DOUPPER
  2286.  bsr dothisroom
  2287. noupperroom:
  2288.  move.l ThisRoomToDraw,a0
  2289.  clr.b DOUPPER
  2290.  bsr dothisroom
  2291.  
  2292.  bra dontbothercantseeit
  2293. botfirst:
  2294.  
  2295.  move.l ThisRoomToDraw,a0
  2296.  clr.b DOUPPER
  2297.  bsr dothisroom
  2298.  move.l ThisRoomToDraw+4,a0
  2299.  cmp.l #LEVELGRAPHICS,a0
  2300.  beq.s noupperroom2
  2301.  st DOUPPER
  2302.  bsr dothisroom
  2303. noupperroom2:
  2304.  
  2305. dontbothercantseeit:
  2306. pastemp:
  2307.  
  2308.  move.l (a7)+,a1
  2309.  move.l ThisRoomToDraw,a0
  2310.  move.w (a0),d7
  2311.  adda.w #8,a1
  2312.  bra finditit
  2313.  
  2314. nomoretodoatall:
  2315.  
  2316.  move.l (a7)+,a0
  2317.  
  2318.  bra subroomloop
  2319.  
  2320. jumpoutofrooms:
  2321.  
  2322.  rts
  2323.  
  2324. prot9: dc.w 0
  2325.  
  2326. TempBuffer: ds.l 100 
  2327.  
  2328. ClipTable: ds.l 30
  2329. EndOfClipPt: dc.l 0
  2330. DOUPPER: dc.w 0
  2331.  
  2332. dothisroom
  2333.  
  2334.  move.w (a0)+,d0
  2335.  move.w d0,currzone
  2336.  move.l #ZoneBrightTable,a1
  2337.  move.l (a1,d0.w*4),d1
  2338.  tst.b DOUPPER
  2339.  bne.s .okbot
  2340.  swap d1
  2341. .okbot:
  2342.  move.w d1,ZoneBright
  2343.  
  2344. polyloop:
  2345.  move.w (a0)+,d0
  2346.  blt jumpoutofloop
  2347.  beq itsawall
  2348.  cmp.w #3,d0
  2349.  beq itsasetclip
  2350.  blt itsafloor
  2351.  cmp.w #4,d0
  2352.  beq itsanobject
  2353.  cmp.w #5,d0
  2354.  beq.s itsanarc
  2355.  cmp.w #6,d0
  2356.  beq itsalightbeam
  2357.  cmp.w #7,d0
  2358.  beq.s itswater
  2359.  cmp.w #9,d0
  2360.  ble itsachunkyfloor
  2361.  cmp.w #11,d0
  2362.  ble.s itsabumpyfloor
  2363.  cmp.w #12,d0
  2364.  beq.s itsbackdrop
  2365.  cmp.w #13,d0
  2366.  beq.s itsaseewall
  2367.  
  2368.  bra polyloop
  2369.  
  2370. itsaseewall:
  2371.  st seethru
  2372.  jsr itsawalldraw
  2373.  bra polyloop
  2374.  
  2375. itsbackdrop:
  2376.  jsr putinbackdrop
  2377.  bra polyloop
  2378.  
  2379. itswater:
  2380.  move.w #1,d0
  2381.  move.l #FloorLine,LineToUse
  2382.  st usewater
  2383.  clr.b usebumps
  2384.  jsr itsafloordraw
  2385.  bra polyloop
  2386.  
  2387. itsanarc:
  2388.  jsr CurveDraw
  2389.  bra polyloop
  2390. itsanobject:
  2391.  jsr ObjDraw
  2392.  bra polyloop
  2393. itsalightbeam:
  2394.  jsr LightDraw
  2395.  bra polyloop
  2396.  
  2397. itsabumpyfloor:
  2398.  sub.w #9,d0
  2399.  st usebumps
  2400.  st smoothbumps
  2401.  clr.b usewater
  2402.  move.l #BumpLine,LineToUse
  2403.  jsr itsafloordraw
  2404.  bra polyloop
  2405.  
  2406. itsachunkyfloor:
  2407.  subq.w #7,d0
  2408.  st usebumps
  2409.  sub.w #12,topclip
  2410. ; add.w #10,botclip
  2411.  clr.b smoothbumps
  2412.  clr.b usewater
  2413.  move.l #BumpLine,LineToUse
  2414.  jsr itsafloordraw
  2415.  add.w #12,topclip
  2416. ; sub.w #10,botclip
  2417.  bra polyloop 
  2418.  
  2419. itsafloor:
  2420.  
  2421.  move.l #FloorLine,LineToUse
  2422. * 1,2 = floor/roof
  2423.  clr.b usewater
  2424.  clr.b usebumps
  2425.  st.b gourfloor    
  2426.  jsr itsafloordraw
  2427.  bra polyloop
  2428. itsasetclip:
  2429.  bra polyloop
  2430. itsawall:
  2431.  clr.b seethru
  2432. ; move.l #stripbuffer,a1
  2433.  jsr itsawalldraw
  2434.  bra polyloop
  2435.  
  2436. jumpoutofloop:
  2437.  rts
  2438.  
  2439. ThisRoomToDraw: dc.l 0,0
  2440. SplitHeight: dc.l 0
  2441.  
  2442.  include "ab3:source/OrderZones"
  2443.  
  2444. ReadMouse:
  2445.  clr.l d0
  2446.  clr.l d1
  2447.  move.w $a(a6),d0
  2448.  lsr.w #8,d0
  2449.  ext.l d0
  2450.  move.w d0,d3
  2451.  move.w oldmy,d2
  2452.  sub.w d2,d0
  2453.  
  2454.  cmp.w #127,d0
  2455.  blt nonegy
  2456.  move.w #255,d1
  2457.  sub.w d0,d1
  2458.  move.w d1,d0
  2459.  neg.w d0
  2460. nonegy:
  2461.  
  2462.  cmp.w #-127,d0
  2463.  bge nonegy2
  2464.  move.w #255,d1
  2465.  add.w d0,d1
  2466.  move.w d1,d0
  2467. nonegy2:
  2468.  
  2469.  add.b d0,d2
  2470.  add.w d0,oldy2
  2471.  move.w d2,oldmy
  2472.  move.w d2,d0
  2473.  
  2474.  move.w oldy2,d0
  2475.  move.w d0,ymouse
  2476.  
  2477.  clr.l d0
  2478.  clr.l d1
  2479.  move.w $a(a6),d0
  2480.  ext.w d0
  2481.  ext.l d0
  2482.  move.w d0,d3
  2483.  move.w oldmx,d2
  2484.  sub.w d2,d0
  2485.  
  2486.  cmp.w #127,d0
  2487.  blt nonegx
  2488.  move.w #255,d1
  2489.  sub.w d0,d1
  2490.  move.w d1,d0
  2491.  neg.w d0
  2492. nonegx:
  2493.  
  2494.  cmp.w #-127,d0
  2495.  bge nonegx2
  2496.  move.w #255,d1
  2497.  add.w d0,d1
  2498.  move.w d1,d0
  2499. nonegx2:
  2500.  
  2501.  add.b d0,d2
  2502.  move.w d0,d1
  2503.  move.w d2,oldmx
  2504.  
  2505.  move.w #$0,$dff034
  2506.  btst #2,$dff016
  2507.  beq.s noturn
  2508.  
  2509.  add.w d0,oldx2
  2510.  move.w oldx2,d0
  2511.  and.w #2047,d0
  2512.  move.w d0,oldx2
  2513.  
  2514.  asl.w #2,d0
  2515.  sub.w prevx,d0
  2516.  add.w d0,prevx
  2517.  add.w d0,PLR1s_angpos
  2518.  move.w #0,lrs
  2519.  rts
  2520.  
  2521. noturn:
  2522.  
  2523. ; got to move lr instead. 
  2524.  
  2525. ; d1 = speed moved l/r
  2526.  
  2527.  move.w d1,lrs
  2528.  
  2529.  rts
  2530.  
  2531. lrs: dc.w 0
  2532. prevx: dc.w 0
  2533.  
  2534. mang: dc.w 0
  2535. oldymouse: dc.w 0
  2536. xmouse: dc.w 0
  2537. ymouse: dc.w 0
  2538. oldx2: dc.w 0
  2539. oldmx: dc.w 0
  2540. oldmy: dc.w 0
  2541. oldy2: dc.w 0
  2542.  
  2543. RotateLevelPts:
  2544.  
  2545.  move.w sinval,d6
  2546.  swap d6
  2547.  move.w cosval,d6
  2548.  
  2549.  move.l PointsToRotatePtr,a0
  2550.  move.l Points,a3
  2551.  move.l #Rotated,a1
  2552.  move.l #OnScreen,a2
  2553.  move.w xoff,d4
  2554.  move.w zoff,d5
  2555.  
  2556. ; move.w #$c40,$dff106
  2557. ; move.w #$f00,$dff180
  2558.  
  2559. pointrotlop:
  2560.  move.w (a0)+,d7
  2561.  blt.s outofpointrot
  2562.  
  2563.  move.w (a3,d7*4),d0
  2564.  sub.w d4,d0
  2565.  move.w d0,d2
  2566.  move.w 2(a3,d7*4),d1
  2567.  sub.w d5,d1
  2568.  muls d6,d2
  2569.  swap d6
  2570.  move.w d1,d3
  2571.  muls d6,d3
  2572.  sub.l d3,d2
  2573.  add.l d2,d2
  2574.  swap d2
  2575.  ext.l d2
  2576.  asl.l #7,d2
  2577.  add.l xwobble,d2
  2578.  move.l d2,(a1,d7*8)
  2579.  
  2580.  muls d6,d0
  2581.  swap d6
  2582.  muls d6,d1
  2583.  add.l d0,d1
  2584.  asl.l #2,d1
  2585.  swap d1
  2586.  move.l d1,4(a1,d7*8)
  2587.  
  2588.  tst.w d1
  2589.  bgt.s ptnotbehind
  2590.  tst.w d2
  2591.  bgt.s onrightsomewhere
  2592.  move.w #0,d2
  2593.  bra putin
  2594. onrightsomewhere:
  2595.  move.w #96,d2
  2596.  bra putin
  2597. ptnotbehind:
  2598.  
  2599.  divs d1,d2
  2600.  add.w #47,d2
  2601. putin:
  2602.  move.w d2,(a2,d7*2)
  2603.  
  2604.  bra pointrotlop
  2605. outofpointrot:
  2606.  
  2607. ; move.w #$c40,$dff106
  2608. ; move.w #$ff0,$dff180
  2609.  
  2610.  rts
  2611.  
  2612. PLR1_ObjDists
  2613.  ds.w 200
  2614. PLR2_ObjDists
  2615.  ds.w 200
  2616.  
  2617. CalcPLR1InLine:
  2618.  
  2619.  move.w PLR1_sinval,d5
  2620.  move.w PLR1_cosval,d6
  2621.  move.l ObjectData,a4
  2622.  move.l ObjectPoints,a0
  2623.  move.w NumObjectPoints,d7
  2624.  move.l #PLR1_ObsInLine,a2
  2625.  move.l #PLR1_ObjDists,a3
  2626.  
  2627. .objpointrotlop:
  2628.  
  2629.  move.w (a0),d0
  2630.  sub.w PLR1_xoff,d0
  2631.  move.w 4(a0),d1
  2632.  addq #8,a0
  2633.  
  2634.  tst.w 12(a4)
  2635.  blt .noworkout
  2636.  
  2637.  sub.w PLR1_zoff,d1
  2638.  move.w d0,d2
  2639.  muls d6,d2
  2640.  move.w d1,d3
  2641.  muls d5,d3
  2642.  sub.l d3,d2
  2643.  add.l d2,d2
  2644.  swap d2
  2645.  
  2646.  muls d5,d0
  2647.  muls d6,d1
  2648.  add.l d0,d1
  2649.  asl.l #2,d1
  2650.  swap d1
  2651.  moveq #0,d3
  2652.  
  2653.  ext.l d2
  2654.  asl.l #7,d2
  2655.  tst.w d1
  2656.  ble.s .notinline
  2657.  
  2658.  divs d1,d2
  2659.  cmp.w #20,d2
  2660.  bgt.s .notinline
  2661.  cmp.w #-20,d2
  2662.  blt.s .notinline
  2663.  st d3
  2664. .notinline
  2665.  move.b d3,(a2)+
  2666.  
  2667.  move.w d1,(a3)+
  2668.  
  2669.  add.w #64,a4
  2670.  dbra d7,.objpointrotlop
  2671.  
  2672.  rts
  2673.  
  2674. .noworkout:
  2675.  move.b #0,(a2)+
  2676.  move.w #0,(a3)+
  2677.  add.w #64,a4
  2678.  dbra d7,.objpointrotlop
  2679.  rts
  2680.  
  2681.  
  2682. CalcPLR2InLine:
  2683.  
  2684.  move.w PLR2_sinval,d5
  2685.  move.w PLR2_cosval,d6
  2686.  move.l ObjectData,a4
  2687.  move.l ObjectPoints,a0
  2688.  move.w NumObjectPoints,d7
  2689.  move.l #PLR2_ObsInLine,a2
  2690.  move.l #PLR2_ObjDists,a3
  2691.  
  2692. .objpointrotlop:
  2693.  
  2694.  move.w (a0),d0
  2695.  sub.w PLR2_xoff,d0
  2696.  move.w 4(a0),d1
  2697.  addq #8,a0
  2698.  
  2699.  tst.w 12(a4)
  2700.  blt .noworkout
  2701.  
  2702.  sub.w PLR2_zoff,d1
  2703.  move.w d0,d2
  2704.  muls d6,d2
  2705.  move.w d1,d3
  2706.  muls d5,d3
  2707.  sub.l d3,d2
  2708.  add.l d2,d2
  2709.  swap d2
  2710.  
  2711.  muls d5,d0
  2712.  muls d6,d1
  2713.  add.l d0,d1
  2714.  asl.l #2,d1
  2715.  swap d1
  2716.  moveq #0,d3
  2717.  
  2718.  ext.l d2
  2719.  asl.l #7,d2
  2720.  tst.w d1
  2721.  ble.s .notinline
  2722.  
  2723.  divs d1,d2
  2724.  cmp.w #20,d2
  2725.  bgt.s .notinline
  2726.  cmp.w #-20,d2
  2727.  blt.s .notinline
  2728.  st d3
  2729. .notinline
  2730.  move.b d3,(a2)+
  2731.  
  2732.  move.w d1,(a3)+
  2733.  
  2734.  add.w #64,a4
  2735.  dbra d7,.objpointrotlop
  2736.  
  2737.  rts
  2738.  
  2739. .noworkout:
  2740.  move.w #0,(a3)+
  2741.  move.b #0,(a2)+
  2742.  add.w #64,a4
  2743.  dbra d7,.objpointrotlop
  2744.  rts
  2745.  
  2746.  
  2747. RotateObjectPts:
  2748.  
  2749.  move.w sinval,d5
  2750.  move.w cosval,d6
  2751.  
  2752.  move.l ObjectData,a4
  2753.  move.l ObjectPoints,a0
  2754.  move.w NumObjectPoints,d7
  2755.  move.l #ObjRotated,a1
  2756.  
  2757.  
  2758. .objpointrotlop:
  2759.  
  2760.  move.w (a0),d0
  2761.  sub.w xoff,d0
  2762.  move.w 4(a0),d1
  2763.  addq #8,a0
  2764.  
  2765.  tst.w 12(a4)
  2766.  blt .noworkout
  2767.  
  2768.  sub.w zoff,d1
  2769.  move.w d0,d2
  2770.  muls d6,d2
  2771.  move.w d1,d3
  2772.  muls d5,d3
  2773.  sub.l d3,d2
  2774.  add.l d2,d2
  2775.  swap d2
  2776.  move.w d2,(a1)+
  2777.  
  2778.  muls d5,d0
  2779.  muls d6,d1
  2780.  add.l d0,d1
  2781.  asl.l #2,d1
  2782.  swap d1
  2783.  moveq #0,d3
  2784.  
  2785.  move.w d1,(a1)+
  2786.  ext.l d2
  2787.  asl.l #7,d2
  2788.  add.l xwobble,d2
  2789.  move.l d2,(a1)+
  2790.  sub.l xwobble,d2
  2791.  
  2792.  add.w #64,a4
  2793.  dbra d7,.objpointrotlop
  2794.  
  2795.  rts
  2796.  
  2797. .noworkout:
  2798.   move.l #0,(a1)+
  2799.   move.l #0,(a1)+
  2800.   add.w #64,a4
  2801.   dbra d7,.objpointrotlop
  2802.   rts
  2803.  
  2804. LightDraw:
  2805.  
  2806.  move.w (a0)+,d0
  2807.  move.w (a0)+,d1
  2808.  move.l #Rotated,a1
  2809.  move.w 6(a1,d0.w*8),d2
  2810.  ble.s oneendbehind
  2811.  move.w 6(a1,d1.w*8),d3
  2812.  bgt.s bothendsinfront
  2813.  
  2814. oneendbehind:
  2815.  rts
  2816. bothendsinfront:
  2817.  
  2818.  move.l #OnScreen,a2
  2819.  move.w (a2,d0.w*2),d0
  2820.  bge.s okleftend
  2821.  moveq #0,d0
  2822. okleftend:
  2823.  move.w (a2,d1.w*2),d1
  2824.  bgt.s somevis
  2825.  rts
  2826. somevis:
  2827.  cmp.w #95,d0
  2828.  ble.s somevis2
  2829.  rts
  2830. somevis2:
  2831.  cmp.w #95,d1
  2832.  ble.s okrightend
  2833.  move.w #95,d1
  2834. okrightend:
  2835.  
  2836.  sub.w d0,d1
  2837.  blt.s wrongbloodywayround
  2838.  move.l #brightentab,a4
  2839.  move.l #objintocop,a1
  2840.  lea (a1,d0.w*2),a1
  2841.  
  2842.  move.l frompt,a3
  2843.  move.w #104*4,d6
  2844.  move.w #79,d2
  2845. lacross:
  2846.  move.w d2,d3
  2847.  move.l a3,a2
  2848.  adda.w (a1)+,a2
  2849. ldown:
  2850.  add.w d6,a2
  2851.  move.w (a2),d7
  2852.  move.w (a4,d7.w*2),(a2)
  2853.  dbra d3,ldown
  2854.  dbra d1,lacross
  2855.  
  2856. wrongbloodywayround:
  2857.  
  2858.  rts
  2859.  
  2860. FaceToPlace: dc.w 0
  2861.  
  2862. Cheese:
  2863.  dc.w 4,15
  2864.  
  2865. FacesList:
  2866.  dc.w 0,4*4
  2867.  dc.w 1,2*4
  2868.  dc.w 0,2*4
  2869.  dc.w 2,2*4
  2870.  dc.w 0,2*4
  2871.  dc.w 1,3*4
  2872.  dc.w 0,2*4
  2873.  dc.w 2,3*4
  2874.  dc.w 0,5*4
  2875.  dc.w 1,2*4
  2876.  dc.w 0,2*4
  2877.  dc.w 2,2*4
  2878.  dc.w 0,2*4
  2879.  dc.w 1,2*4
  2880.  dc.w 0,2*4
  2881.  dc.w 2,3*4
  2882.  dc.w 0,1*4
  2883.  dc.w 1,3*4
  2884.  dc.w 0,1*4
  2885.  dc.w 2,3*4
  2886.  dc.w 0,1*4
  2887.  
  2888. EndOfFacesList:
  2889.  
  2890. FacesPtr:
  2891.  dc.l FacesList
  2892. FacesCounter:
  2893.  dc.w 0
  2894. Expression:
  2895.  dc.w 0
  2896.  
  2897. PlaceFace:
  2898.  
  2899.  move.w FacesCounter,d0
  2900.  subq #1,d0
  2901.  bgt.s NoNewFace
  2902.  
  2903.  move.l FacesPtr,a0
  2904.  
  2905.  move.w 2(a0),d0
  2906.  move.w (a0),Expression
  2907.  addq #4,a0
  2908.  cmp.l #EndOfFacesList,a0
  2909.  blt.s NotFirstFace
  2910.  
  2911.  move.l #FacesList,a0
  2912.  
  2913. NotFirstFace
  2914.  move.l a0,FacesPtr
  2915.  
  2916. NoNewFace:
  2917.  
  2918.  move.w d0,FacesCounter
  2919.  
  2920.  Move.w FaceToPlace,d0
  2921.  muls #5,d0
  2922.  add.w Expression,d0
  2923.  move.l #FacePlace+10,a0
  2924.  move.l #Faces,a1
  2925.  muls #(4*32*5),d0
  2926.  adda.w d0,a1
  2927.  move.w #4,d0
  2928.  move.w #24,d1
  2929.  
  2930.  move.w #4,d3
  2931. bitplaneloop:
  2932.  move.w #31,d2
  2933. PlaceFaceToPlaceInFacePlaceLoop:
  2934.  move.l (a1),(a0)
  2935.  adda.w d0,a1
  2936.  adda.w d1,a0
  2937.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  2938.  dbra d3,bitplaneloop
  2939.  
  2940.  rts
  2941.  
  2942. Energy:
  2943.  dc.w 191
  2944. OldEnergy:
  2945.  dc.w 191
  2946. Ammo: dc.w 63
  2947. OldAmmo: dc.w 63
  2948.  
  2949. FullEnergy:
  2950.  move.w #127,Energy
  2951.  move.w #127,OldEnergy
  2952.  move.l #health,a0
  2953.  move.l #borders,a1
  2954.  add.l #25*8*2+6,a1
  2955.  lea 2592(a1),a2
  2956.  move.w #127,d0
  2957. PutInFull:
  2958.  move.b (a0)+,(a1)
  2959.  move.b (a0)+,8(a1)
  2960.  add.w #16,a1
  2961.  move.b (a0)+,(a2)
  2962.  move.b (a0)+,8(a2)
  2963.  add.w #16,a2
  2964.  dbra d0,PutInFull
  2965.  
  2966.  rts
  2967.  
  2968. EnergyBar:
  2969.  
  2970.  move.w Energy,d0
  2971.  cmp.w OldEnergy,d0
  2972.  bne.s gottochange
  2973.  
  2974. NoChange
  2975.  rts
  2976.  
  2977. gottochange:
  2978.   
  2979.  blt LessEnergy
  2980.  cmp.w #127,Energy
  2981.  blt.s NotMax
  2982.  move.w #127,Energy
  2983. NotMax:
  2984.  
  2985.  move.w Energy,d0
  2986.  move.w OldEnergy,d2
  2987.  sub.w d0,d2
  2988.  beq.s NoChange    
  2989.  neg.w d2
  2990.  
  2991.  move.w #127,d3
  2992.  sub.w d0,d3
  2993.  
  2994.  move.l #health,a0
  2995.  lea (a0,d3.w*4),a0
  2996.  move.l #borders+25*16+6,a1
  2997.  lsl.w #4,d3
  2998.  add.w d3,a1
  2999.  lea 2592(a1),a2
  3000.  
  3001. EnergyRise:
  3002.  move.b (a0)+,(a1)
  3003.  move.b (a0)+,8(a1)
  3004.  add.w #16,a1
  3005.  move.b (a0)+,(a2)
  3006.  move.b (a0)+,8(a2)
  3007.  add.w #16,a2
  3008.  subq #1,d2
  3009.  bgt.s EnergyRise
  3010.  
  3011.  move.w Energy,OldEnergy
  3012.  
  3013.  rts 
  3014.  
  3015. LessEnergy: 
  3016.  move.w OldEnergy,d2
  3017.  sub.w d0,d2
  3018.  
  3019.  move.w #127,d3
  3020.  sub.w OldEnergy,d3
  3021.  
  3022.  move.l #borders+25*16+6,a1
  3023.  asl.w #4,d3
  3024.  add.w d3,a1
  3025.  lea 2592(a1),a2
  3026.  
  3027. EnergyDrain:
  3028.  move.b #0,(a1)
  3029.  move.b #0,8(a1)
  3030.  move.b #0,(a2)
  3031.  move.b #0,8(a2)
  3032.  add.w #16,a1
  3033.  add.w #16,a2
  3034.  subq #1,d2
  3035.  bgt.s EnergyDrain
  3036.  
  3037.  move.w Energy,OldEnergy
  3038.  
  3039.  rts 
  3040.  
  3041. AmmoBar:
  3042.  
  3043.  move.w Ammo,d0
  3044.  cmp.w OldAmmo,d0
  3045.  bne.s .gottochange
  3046.  
  3047. .NoChange
  3048.  rts
  3049.  
  3050. .gottochange:
  3051.   
  3052.  blt LessAmmo
  3053.  cmp.w #63,Ammo
  3054.  blt.s .NotMax
  3055.  move.w #63,Ammo
  3056. .NotMax:
  3057.  
  3058.  move.w Ammo,d0
  3059.  move.w OldAmmo,d2
  3060.  sub.w d0,d2
  3061.  beq.s .NoChange
  3062.  neg.w d2
  3063.  
  3064.  move.w #63,d3
  3065.  sub.w d0,d3
  3066.  
  3067.  move.l #Ammunition,a0
  3068.  lea (a0,d3.w*8),a0
  3069.  move.l #borders+5184+25*16+1,a1
  3070.  lsl.w #5,d3
  3071.  add.w d3,a1
  3072.  lea 2592(a1),a2
  3073.  
  3074. AmmoRise:
  3075.  move.b (a0)+,(a1)
  3076.  move.b (a0)+,8(a1)
  3077.  add.w #16,a1
  3078.  move.b (a0)+,(a2)
  3079.  move.b (a0)+,8(a2)
  3080.  add.w #16,a2
  3081.  move.b (a0)+,(a1)
  3082.  move.b (a0)+,8(a1)
  3083.  add.w #16,a1
  3084.  move.b (a0)+,(a2)
  3085.  move.b (a0)+,8(a2)
  3086.  add.w #16,a2
  3087.  subq #1,d2
  3088.  bgt.s AmmoRise
  3089.  
  3090.  move.w Ammo,OldAmmo
  3091.  
  3092.  rts 
  3093.  
  3094.  
  3095. LessAmmo: 
  3096.  move.w OldAmmo,d2
  3097.  sub.w d0,d2
  3098.  
  3099.  move.w #63,d3
  3100.  sub.w OldAmmo,d3
  3101.  
  3102.  move.l #borders++5184+25*16+1,a1
  3103.  asl.w #5,d3
  3104.  add.w d3,a1
  3105.  lea 2592(a1),a2
  3106.  
  3107. AmmoDrain:
  3108.  move.b #0,(a1)
  3109.  move.b #0,8(a1)
  3110.  move.b #0,(a2)
  3111.  move.b #0,8(a2)
  3112.  add.w #16,a1
  3113.  add.w #16,a2
  3114.  move.b #0,(a1)
  3115.  move.b #0,8(a1)
  3116.  move.b #0,(a2)
  3117.  move.b #0,8(a2)
  3118.  add.w #16,a1
  3119.  add.w #16,a2
  3120.  subq #1,d2
  3121.  bgt.s AmmoDrain
  3122.  
  3123.  move.w Ammo,OldAmmo
  3124.  
  3125.  rts 
  3126.  
  3127. nulop:
  3128.  move.w #$0010,$dff000+intreq
  3129.  rte
  3130.  
  3131. doanything: dc.w 0
  3132.  
  3133. end:
  3134.  
  3135.  move.l drawpt,d0
  3136.  move.l olddrawpt,drawpt
  3137.  move.l d0,olddrawpt
  3138.  move.l d0,$dff084
  3139.  
  3140.  clr.b doanything
  3141.  cmp.b #'b',Prefsfile+3
  3142.  bne.s .noback
  3143.  jsr mt_end
  3144. .noback
  3145.  tst.w Energy
  3146.  bgt.s wevewon
  3147.  
  3148.  move.l #gameover,mt_data
  3149.  st UseAllChannels
  3150.  clr.b reachedend
  3151.  jsr mt_init
  3152. playgameover:
  3153.  move.l #$dff000,a6
  3154. waitfortop2:
  3155.  btst.b #0,intreqrl(a6)
  3156.  beq waitfortop2
  3157.  move.w #$1,intreq(a6)
  3158.  
  3159.  jsr mt_music
  3160.  
  3161.  tst.b reachedend
  3162.  beq.s playgameover
  3163.  
  3164.  bra wevelost
  3165. wevewon:
  3166.  move.l #welldone,mt_data
  3167.  st UseAllChannels
  3168.  clr.b reachedend
  3169.  jsr mt_init
  3170. playwelldone:
  3171.  move.l #$dff000,a6
  3172. waitfortop3:
  3173.  btst.b #0,intreqrl(a6)
  3174.  beq waitfortop3
  3175.  move.w #$1,intreq(a6)
  3176.  
  3177.  jsr mt_music
  3178.  
  3179.  tst.b reachedend
  3180.  beq.s playwelldone
  3181.  
  3182.  
  3183. wevelost:
  3184.  jmp closeeverything 
  3185.  
  3186. endnomusic
  3187.  clr.b doanything
  3188.  cmp.b #'b',Prefsfile+3
  3189.  bne.s .noback
  3190.  jsr mt_end
  3191. .noback
  3192.  jmp closeeverything
  3193.  
  3194. do32:
  3195.  move.w #31,d7
  3196.  move.w #$180,d1
  3197. across:
  3198.  move.w d1,(a1)+
  3199.  move.w d1,(a3)+
  3200.  move.w #0,(a1)+
  3201.  move.w #0,(a3)+
  3202.  add.w #2,d1
  3203.  dbra d7,across
  3204.  rts
  3205.  
  3206.  
  3207.  
  3208. *************************************
  3209. * Set left and right clip values
  3210. *************************************
  3211.  
  3212.  
  3213.  
  3214. NEWsetlclip:
  3215.  move.l #OnScreen,a1
  3216.  move.l #Rotated,a2
  3217.  move.l CONNECT_TABLE,a3
  3218.  
  3219.  move.w (a0),d0
  3220.  bge.s .notignoreleft
  3221.  
  3222. ; move.l #0,(a6)
  3223.  
  3224.  bra .leftnotoktoclip
  3225. .notignoreleft:
  3226.  
  3227.  move.w 6(a2,d0*8),d3    ; left z val
  3228.  bgt.s .leftclipinfront
  3229.  addq #2,a0
  3230.  rts
  3231.  
  3232.  tst.w 6(a2,d0*8)
  3233.  bgt.s .leftnotoktoclip
  3234. .ignoreboth:
  3235. ; move.l #0,(a6)
  3236. ; move.l #96*65536,4(a6)
  3237.  move.w #0,leftclip
  3238.  move.w #96,rightclip
  3239.  addq #8,a6
  3240.  addq #2,a0
  3241.  rts
  3242.  
  3243. .leftclipinfront:
  3244.  move.w (a1,d0*2),d1    ; left x on screen
  3245.  move.w (a0),d2
  3246.  move.w 2(a3,d2.w*4),d2
  3247.  move.w (a1,d2.w*2),d2
  3248.  cmp.w d1,d2
  3249.  bgt.s .leftnotoktoclip
  3250.  
  3251. ; move.w d1,(a6)
  3252. ; move.w d3,2(a6)
  3253.  cmp.w leftclip(pc),d1
  3254.  ble.s .leftnotoktoclip
  3255.  move.w d1,leftclip
  3256. .leftnotoktoclip:
  3257.  
  3258.  addq #2,a0
  3259.  
  3260.  rts
  3261.  
  3262. NEWsetrclip
  3263.  move.l #OnScreen,a1
  3264.  move.l #Rotated,a2
  3265.  move.l CONNECT_TABLE,a3
  3266.  move.w (a0),d0
  3267.  bge.s .notignoreright
  3268. ; move.w #96,4(a6)
  3269. ; move.w #0,6(a6)
  3270.  move.w #0,d4
  3271.  bra .rightnotoktoclip
  3272. .notignoreright:
  3273.  move.w 6(a2,d0*8),d4    ; right z val
  3274.  bgt.s .rightclipinfront
  3275. ; move.w #96,4(a6)
  3276. ; move.w #0,6(a6)
  3277.  bra.s .rightnotoktoclip
  3278.  
  3279. .rightclipinfront:
  3280.  move.w (a1,d0*2),d1    ; right x on screen
  3281.  move.w (a0),d2
  3282.  move.w (a3,d2.w*4),d2
  3283.  move.w (a1,d2.w*2),d2
  3284.  cmp.w d1,d2
  3285.  blt.s .rightnotoktoclip
  3286. ; move.w d1,4(a6)
  3287. ; move.w d4,6(a6)
  3288.  
  3289.  cmp.w rightclip(pc),d1
  3290.  bge.s .rightnotoktoclip
  3291.  addq #1,d1
  3292.  move.w d1,rightclip
  3293. .rightnotoktoclip:
  3294.  addq #8,a6
  3295.  addq #2,a0
  3296.  rts
  3297.  
  3298. FIRSTsetlrclip:
  3299.  move.l #OnScreen,a1
  3300.  move.l #Rotated,a2
  3301.  
  3302.  move.w (a0)+,d0
  3303.  bge.s .notignoreleft
  3304.  bra .leftnotoktoclip
  3305. .notignoreleft:
  3306.  
  3307.  move.w 6(a2,d0*8),d3    ; left z val
  3308.  bgt.s .leftclipinfront
  3309.  
  3310.  move.w (a0),d0
  3311.  blt.s .ignoreboth
  3312.  tst.w 6(a2,d0*8)
  3313.  bgt.s .leftnotoktoclip
  3314. .ignoreboth
  3315.  move.w #96,rightclip
  3316.  move.w #0,leftclip
  3317.  addq #2,a0
  3318.  rts
  3319.  
  3320. .leftclipinfront:
  3321.  move.w (a1,d0*2),d1    ; left x on screen
  3322.  cmp.w leftclip(pc),d1
  3323.  ble.s .leftnotoktoclip
  3324.  move.w d1,leftclip
  3325. .leftnotoktoclip:
  3326.  
  3327.  move.w (a0)+,d0
  3328.  bge.s .notignoreright
  3329.  move.w #0,d4
  3330.  bra .rightnotoktoclip
  3331. .notignoreright:
  3332.  move.w 6(a2,d0*8),d4    ; right z val
  3333.  ble.s .rightnotoktoclip
  3334.  
  3335. .rightclipinfront:
  3336.  move.w (a1,d0*2),d1    ; right x on screen
  3337.  cmp.w rightclip(pc),d1
  3338.  bge.s .rightnotoktoclip
  3339.  addq #1,d1
  3340.  move.w d1,rightclip
  3341. .rightnotoktoclip:
  3342.  
  3343. ; move.w leftclip,d0
  3344. ; move.w rightclip,d1
  3345. ; cmp.w d0,d1
  3346. ; bge.s .noswap
  3347. ; move.w #96,rightclip
  3348. ; move.w #0,leftclip
  3349. ;.noswap:
  3350.  
  3351.  rts
  3352.  
  3353.  
  3354. leftclip2: dc.w 0
  3355. rightclip2: dc.w 0
  3356. ZoneBright: dc.w 0
  3357.  
  3358. npolys: dc.w 0
  3359.  
  3360. PLR1_fire: dc.b 0
  3361. PLR2_fire: dc.b 0
  3362.  
  3363. *****************************************************
  3364.  
  3365.  include "ab3:source/ObjectMove"
  3366.  
  3367. pastdata:
  3368. ***********************************
  3369. * This routine animates brightnesses.
  3370.  
  3371.  
  3372. liftpt: dc.l liftanimtab
  3373.  
  3374. brightpt:
  3375.  dc.l brightanimtab
  3376.  
  3377.  
  3378. liftanim:
  3379.  rts
  3380.  
  3381. ******************************
  3382.  include "ab3:source/Anims"
  3383. ******************************
  3384. startpass:
  3385. ; include "ab3:source/password_reloc.s"
  3386. endpass:
  3387.  
  3388. rotanimpt: dc.w 0
  3389. xradd: dc.w 5
  3390. yradd: dc.w 8
  3391. xrpos: dc.w 320
  3392. yrpos: dc.w 320
  3393.  
  3394. rotanim:
  3395.  rts
  3396.  
  3397. option:
  3398.  dc.l 0,0
  3399.  
  3400. ********** WALL STUFF *******************************
  3401.  
  3402.  include "AB3:source/wallroutine3.chipmem"
  3403.  
  3404. *****************************************************
  3405.  
  3406. ******************************************
  3407. * floor polygon
  3408.  
  3409. numsidestd: dc.w 0
  3410. bottomline: dc.w 0
  3411.  
  3412. NewCornerBuff:
  3413.  ds.l 100
  3414.  
  3415. itsafloordraw:
  3416.  
  3417. * If D0 =1 then its a floor otherwise (=2) it's
  3418. * a roof.
  3419.  
  3420.  move.w #0,above
  3421.  move.w (a0)+,d6    ; ypos of poly
  3422.  
  3423.  move.w leftclip(pc),d7
  3424.  cmp.w rightclip(pc),d7
  3425.  bge.s dontdrawreturn
  3426.  
  3427.  move.w botclip,d7
  3428.  sub.w #40,d7
  3429.  ble.s dontdrawreturn
  3430.  sub.w flooryoff,d6
  3431.  bgt.s below
  3432.  blt.s aboveplayer
  3433. dontdrawreturn:
  3434.  move.w (a0)+,d6    ; sides-1
  3435.  add.w d6,d6
  3436.  add.w d6,a0
  3437.  add.w #4+6,a0
  3438.  rts
  3439. aboveplayer:
  3440.  cmp.w #2,d0
  3441.  bne.s dontdrawreturn
  3442.  move.w #40,d7
  3443.  sub.w topclip,d7 
  3444.  blt.s dontdrawreturn
  3445.  move.w #1,d0
  3446.  move.w d0,above
  3447.  neg.w d6
  3448. below:
  3449.  cmp.w #1,d0
  3450.  bne.s dontdrawreturn
  3451.  move.w d6,distaddr
  3452.  muls #64,d6
  3453.  move.l d6,ypos
  3454.  divs d7,d6        ; zpos of bottom
  3455.             ; visible line
  3456.  move.w d6,minz
  3457.  move.w d7,bottomline
  3458.  
  3459. ; Go round each point finding out
  3460. ; if it should be visible or not.
  3461.  
  3462.  move.l a0,-(a7)
  3463.  
  3464.  move.w (a0)+,d7    ; number of sides
  3465.  move.l #Rotated,a1
  3466.  move.l #OnScreen,a2
  3467.  move.l #NewCornerBuff,a3
  3468.  moveq #0,d4
  3469.  moveq #0,d5
  3470.  moveq #0,d6
  3471.  clr.b anyclipping
  3472.  
  3473. cornerprocessloop:
  3474.  
  3475.  move.w (a0)+,d0
  3476.  move.w 6(a1,d0.w*8),d1
  3477.  ble  .canttell
  3478.  
  3479.  move.w (a2,d0.w*2),d3
  3480.  cmp.w leftclip,d3
  3481.  bgt.s .nol
  3482.  st d4
  3483.  st anyclipping
  3484.  bra.s .nos
  3485. .nol:
  3486.  cmp.w rightclip,d3
  3487.  blt.s .nor
  3488.  st d6
  3489.  st anyclipping
  3490.  bra.s .nos
  3491. .nor:
  3492.  st d5
  3493. .nos:
  3494.  bra .cantell
  3495.  
  3496. .canttell:
  3497.  st d5
  3498.  st anyclipping
  3499.  
  3500. .cantell:
  3501.  
  3502.  
  3503.  dbra d7,cornerprocessloop
  3504.  
  3505.  move.l (a7)+,a0
  3506.  tst.b d5
  3507.  bne.s somefloortodraw
  3508.  eor.b d4,d6
  3509.  bne dontdrawreturn
  3510.  
  3511. somefloortodraw:
  3512.  
  3513.  tst.b gourfloor
  3514.  bne goursides
  3515.  
  3516.  move.w #80,top
  3517.  move.w #-1,bottom
  3518.  move.w #0,drawit
  3519.  move.l #Rotated,a1
  3520.  move.l #OnScreen,a2
  3521.  move.w (a0)+,d7    ; no of sides
  3522. sideloop:
  3523.  move.w minz,d6
  3524.  move.w (a0)+,d1
  3525.  move.w (a0),d3
  3526.  move.w 6(a1,d1*8),d4    ;first z
  3527.  cmp.w d6,d4
  3528.  bgt firstinfront
  3529.  move.w 6(a1,d3*8),d5    ; sec z
  3530.  cmp.w d6,d5
  3531.  ble bothbehind
  3532. ** line must be on left and partially behind.
  3533.  sub.w d5,d4
  3534.  move.l (a1,d1*8),d0
  3535.  sub.l (a1,d3*8),d0
  3536.  asr.l #7,d0
  3537.  sub.w d5,d6
  3538.  muls d6,d0    ; new x coord
  3539.  divs d4,d0
  3540.  ext.l d0
  3541.  asl.l #7,d0
  3542.  
  3543.  add.l (a1,d3*8),d0
  3544.  move.w minz,d4
  3545.  move.w (a2,d3*2),d2
  3546.  divs d4,d0
  3547.  add.w #47,d0
  3548.  move.l ypos,d3
  3549.  divs d5,d3
  3550.  move.w bottomline,d1 
  3551.  bra lineclipped
  3552.  
  3553. firstinfront:
  3554.  move.w 6(a1,d3*8),d5    ; sec z
  3555.  cmp.w d6,d5
  3556.  bgt bothinfront
  3557. ** line must be on right and partially behind.
  3558.  sub.w d4,d5    ; dz
  3559.  move.l (a1,d3*8),d2
  3560.  sub.l (a1,d1*8),d2    ; dx
  3561.  sub.w d4,d6
  3562.  asr.l #7,d2
  3563.  muls d6,d2    ; new x coord
  3564.  divs d5,d2
  3565.  ext.l d2
  3566.  asl.l #7,d2
  3567.  add.l (a1,d1*8),d2
  3568.  move.w minz,d5
  3569.  move.w (a2,d1*2),d0
  3570.  divs d5,d2
  3571.  add.w #47,d2
  3572.  move.l ypos,d1
  3573.  divs d4,d1
  3574.  move.w bottomline,d3 
  3575.  bra lineclipped
  3576.  
  3577. bothinfront:
  3578.  
  3579. * Also, usefully enough, both are on-screen
  3580. * so no bottom clipping is needed.
  3581.  
  3582.  move.w (a2,d1*2),d0    ; first x
  3583.  move.w (a2,d3*2),d2    ; second x
  3584.  move.l ypos,d1
  3585.  move.l d1,d3
  3586.  divs d4,d1        ; first y
  3587.  divs d5,d3        ; second y
  3588. lineclipped:
  3589.  move.l #rightsidetab,a3
  3590.  cmp.w d1,d3
  3591.  beq lineflat
  3592.  st drawit
  3593.  bgt lineonright
  3594.  move.l #leftsidetab,a3
  3595.  exg d1,d3
  3596.  exg d0,d2
  3597.  
  3598.  lea (a3,d1*2),a3
  3599.  
  3600.  cmp.w top(pc),d1
  3601.  bge.s .nonewtop
  3602.  move.w d1,top
  3603. .nonewtop:
  3604.  cmp.w bottom(pc),d3
  3605.  ble.s .nonewbot
  3606.  move.w d3,bottom
  3607. .nonewbot:
  3608.  
  3609.  sub.w d1,d3    ; dy
  3610.  sub.w d0,d2    ; dx
  3611.  
  3612.  blt .linegoingleft
  3613.  sub.w #1,d0
  3614.  
  3615.  ext.l d2
  3616.  divs d3,d2
  3617.  move.w d2,d6
  3618.  swap d2
  3619.  
  3620. ; moveq #0,d6
  3621. ; sub.w d3,d2
  3622. ; blt.s .noco
  3623. ;.makeco
  3624. ; addq #1,d6
  3625. ; sub.w d3,d2
  3626. ; bge.s .makeco
  3627. ;.noco
  3628. ; add.w d3,d2
  3629.  
  3630.  move.w d3,d4
  3631.  move.w d3,d5
  3632.  subq #1,d5
  3633.  move.w d6,d1
  3634.  addq #1,d1
  3635.  
  3636. .pixlopright:
  3637.  move.w d0,(a3)+
  3638.  sub.w d2,d4
  3639.  bge.s .nobigstep
  3640.  add.w d1,d0
  3641.  add.w d3,d4
  3642.  dbra d5,.pixlopright
  3643.  bra lineflat
  3644. .nobigstep
  3645.  add.w d6,d0
  3646.  dbra d5,.pixlopright
  3647.  bra lineflat
  3648.  
  3649. .linegoingleft:
  3650.  
  3651.  sub.w #1,d0
  3652.  
  3653.  neg.w d2
  3654.  
  3655.  ext.l d2
  3656.  divs d3,d2
  3657.  move.w d2,d6
  3658.  swap d2
  3659.  
  3660.  
  3661. ; moveq #0,d6
  3662. ; sub.w d3,d2
  3663. ; blt.s .nocol
  3664. ;.makecol
  3665. ; addq #1,d6
  3666. ; sub.w d3,d2
  3667. ; bge.s .makecol
  3668. ;.nocol
  3669. ; add.w d3,d2
  3670.  
  3671.  
  3672.  
  3673.  move.w d3,d4
  3674.  move.w d3,d5
  3675.  subq #1,d5
  3676.  
  3677.  move.w d6,d1
  3678.  addq #1,d1
  3679.  
  3680. .pixlopleft:
  3681.  sub.w d2,d4
  3682.  bge.s .nobigstepl
  3683.  sub.w d1,d0
  3684.  add.w d3,d4
  3685.  move.w d0,(a3)+
  3686.  dbra d5,.pixlopleft
  3687.  bra lineflat
  3688.  
  3689. .nobigstepl
  3690.  sub.w d6,d0
  3691.  move.w d0,(a3)+
  3692.  dbra d5,.pixlopleft
  3693.  bra lineflat
  3694.  
  3695. lineonright:
  3696.  
  3697.  lea (a3,d1*2),a3
  3698.  
  3699.  cmp.w top(pc),d1
  3700.  bge.s .nonewtop
  3701.  move.w d1,top
  3702. .nonewtop:
  3703.  cmp.w bottom(pc),d3
  3704.  ble.s .nonewbot
  3705.  move.w d3,bottom
  3706. .nonewbot:
  3707.  
  3708.  sub.w d1,d3    ; dy
  3709.  sub.w d0,d2    ; dx
  3710.  blt .linegoingleft
  3711. ; addq #1,d0
  3712.  ext.l d2
  3713.  divs d3,d2
  3714.  move.w d2,d6
  3715.  swap d2
  3716.  
  3717. ; moveq #0,d6
  3718. ; sub.w d3,d2
  3719. ; blt.s .noco
  3720. ;.makeco
  3721. ; addq #1,d6
  3722. ; sub.w d3,d2
  3723. ; bge.s .makeco
  3724. ;.noco
  3725. ; add.w d3,d2
  3726.  
  3727.  move.w d3,d4
  3728.  move.w d3,d5
  3729.  subq #1,d5
  3730.  move.w d6,d1
  3731.  addq #1,d1
  3732.  
  3733. .pixlopright:
  3734.  sub.w d2,d4
  3735.  bge.s .nobigstep
  3736.  add.w d1,d0
  3737.  add.w d3,d4
  3738.  move.w d0,(a3)+
  3739.  dbra d5,.pixlopright
  3740.  bra lineflat
  3741.  
  3742. .nobigstep
  3743.  add.w d6,d0
  3744.  move.w d0,(a3)+
  3745.  dbra d5,.pixlopright
  3746.  bra lineflat
  3747.  
  3748. .linegoingleft:
  3749. ; addq #1,d0
  3750.  neg.w d2
  3751.  
  3752.  ext.l d2
  3753.  divs d3,d2
  3754.  move.w d2,d6
  3755.  swap d2
  3756.  
  3757.  
  3758. ; moveq #0,d6
  3759. ; sub.w d3,d2
  3760. ; blt.s .nocol
  3761. ;.makecol
  3762. ; addq #1,d6
  3763. ; sub.w d3,d2
  3764. ; bge.s .makecol
  3765. ;.nocol
  3766. ; add.w d3,d2
  3767.  
  3768.  move.w d3,d4
  3769.  move.w d3,d5
  3770.  subq #1,d5
  3771.  move.w d6,d1
  3772.  addq #1,d1
  3773.  
  3774. .pixlopleft:
  3775.  move.w d0,(a3)+
  3776.  sub.w d2,d4
  3777.  bge.s .nobigstepl
  3778.  sub.w d1,d0
  3779.  add.w d3,d4
  3780.  dbra d5,.pixlopleft
  3781.  bra lineflat
  3782.  
  3783. .nobigstepl
  3784.  sub.w d6,d0
  3785.  dbra d5,.pixlopleft
  3786.  
  3787. lineflat:
  3788.  
  3789. bothbehind:
  3790.  dbra d7,sideloop
  3791.  bra pastsides
  3792.  
  3793. fbr: dc.w 0
  3794. sbr: dc.w 0
  3795.  
  3796. goursides:
  3797.  
  3798.  move.w #80,top
  3799.  move.w #-1,bottom
  3800.  move.w #0,drawit
  3801.  move.l #Rotated,a1
  3802.  move.l #OnScreen,a2
  3803.  move.w (a0)+,d7    ; no of sides
  3804. sideloopGOUR:
  3805.  move.w minz,d6
  3806.  move.w (a0)+,d1
  3807.  move.w (a0),d3
  3808.  
  3809.  move.l #CurrentPointBrights,a4
  3810.  move.w (a4,d1.w*2),fbr
  3811.  move.w (a4,d3.w*2),sbr
  3812.  
  3813.  move.w 6(a1,d1*8),d4    ;first z
  3814.  cmp.w d6,d4
  3815.  bgt firstinfrontGOUR
  3816.  move.w 6(a1,d3*8),d5    ; sec z
  3817.  cmp.w d6,d5
  3818.  ble bothbehindGOUR
  3819. ** line must be on left and partially behind.
  3820.  sub.w d5,d4
  3821.  
  3822.  move.w fbr,d0
  3823.  sub.w sbr,d0
  3824.  sub.w d5,d6
  3825.  muls d6,d0
  3826.  divs d4,d0
  3827.  add.w sbr,d0
  3828.  move.w d0,fbr
  3829.  
  3830.  move.l (a1,d1*8),d0
  3831.  sub.l (a1,d3*8),d0
  3832.  asr.l #7,d0
  3833.  muls d6,d0    ; new x coord
  3834.  divs d4,d0
  3835.  ext.l d0
  3836.  asl.l #7,d0
  3837.  
  3838.  add.l (a1,d3*8),d0
  3839.  move.w minz,d4
  3840.  move.w (a2,d3*2),d2
  3841.  divs d4,d0
  3842.  add.w #47,d0
  3843.  move.l ypos,d3
  3844.  divs d5,d3
  3845.  
  3846.  move.w bottomline,d1 
  3847.  bra lineclippedGOUR
  3848.  
  3849. firstinfrontGOUR:
  3850.  move.w 6(a1,d3*8),d5    ; sec z
  3851.  cmp.w d6,d5
  3852.  bgt bothinfrontGOUR
  3853. ** line must be on right and partially behind.
  3854.  sub.w d4,d5    ; dz
  3855.  
  3856.  move.w sbr,d2
  3857.  sub.w fbr,d2
  3858.  sub.w d4,d6
  3859.  muls d6,d2
  3860.  divs d5,d2
  3861.  add.w fbr,d2
  3862.  move.w d2,sbr
  3863.  
  3864.  move.l (a1,d3*8),d2
  3865.  sub.l (a1,d1*8),d2    ; dx
  3866.  asr.l #7,d2
  3867.  muls d6,d2    ; new x coord
  3868.  divs d5,d2
  3869.  ext.l d2
  3870.  asl.l #7,d2
  3871.  add.l (a1,d1*8),d2
  3872.  move.w minz,d5
  3873.  move.w (a2,d1*2),d0
  3874.  divs d5,d2
  3875.  add.w #47,d2
  3876.  move.l ypos,d1
  3877.  divs d4,d1
  3878.  move.w bottomline,d3 
  3879.  bra lineclippedGOUR
  3880.  
  3881. bothinfrontGOUR:
  3882.  
  3883. * Also, usefully enough, both are on-screen
  3884. * so no bottom clipping is needed.
  3885.  
  3886.  move.w (a2,d1*2),d0    ; first x
  3887.  move.w (a2,d3*2),d2    ; second x
  3888.  move.l ypos,d1
  3889.  move.l d1,d3
  3890.  divs d4,d1        ; first y
  3891.  divs d5,d3        ; second y
  3892. lineclippedGOUR:
  3893.  move.l #rightsidetab,a3
  3894.  cmp.w d1,d3
  3895.  beq lineflatGOUR
  3896.  st drawit
  3897.  bgt lineonrightGOUR
  3898.  move.l #leftsidetab,a3
  3899.  exg d1,d3
  3900.  exg d0,d2
  3901.  
  3902.  lea (a3,d1*2),a3
  3903.  lea leftbrighttab-leftsidetab(a3),a4
  3904.  
  3905.  cmp.w top(pc),d1
  3906.  bge.s .nonewtop
  3907.  move.w d1,top
  3908. .nonewtop:
  3909.  cmp.w bottom(pc),d3
  3910.  ble.s .nonewbot
  3911.  move.w d3,bottom
  3912. .nonewbot:
  3913.  
  3914.  sub.w d1,d3    ; dy
  3915.  sub.w d0,d2    ; dx
  3916.  
  3917.  blt .linegoingleft
  3918.  sub.w #1,d0
  3919.  
  3920.  ext.l d2
  3921.  divs d3,d2
  3922.  move.w d2,d6
  3923.  swap d2
  3924.  move.w d2,a5
  3925.  
  3926. ; moveq #0,d6
  3927. ; sub.w d3,d2
  3928. ; blt.s .noco
  3929. ;.makeco
  3930. ; addq #1,d6
  3931. ; sub.w d3,d2
  3932. ; bge.s .makeco
  3933. ;.noco
  3934. ; add.w d3,d2
  3935.  
  3936.  move.w d3,d4
  3937.  move.w d3,d5
  3938.  subq #1,d5
  3939.  move.w d6,d1
  3940.  addq #1,d1
  3941.  move.w d1,a6
  3942.  
  3943.  moveq #0,d1
  3944.  move.w sbr,d1
  3945.  move.w fbr,d2
  3946.  sub.w d1,d2
  3947.  ext.l d2
  3948.  asl.w #8,d2
  3949.  asl.w #3,d2
  3950.  divs d3,d2 
  3951.  ext.l d2
  3952.  asl.l #5,d2
  3953.  swap d1
  3954.  
  3955. .pixlopright:
  3956.  move.w d0,(a3)+
  3957.  swap d1
  3958.  move.w d1,(a4)+
  3959.  swap d1
  3960.  add.l d2,d1
  3961.  
  3962.  sub.w a5,d4
  3963.  bge.s .nobigstep
  3964.  add.w a6,d0
  3965.  add.w d3,d4
  3966.  dbra d5,.pixlopright
  3967.  bra lineflatGOUR
  3968. .nobigstep
  3969.  
  3970.  add.w d6,d0
  3971.  dbra d5,.pixlopright
  3972.  bra lineflatGOUR
  3973.  
  3974. .linegoingleft:
  3975.  
  3976.  sub.w #1,d0
  3977.  
  3978.  neg.w d2
  3979.  
  3980.  ext.l d2
  3981.  divs d3,d2
  3982.  move.w d2,d6
  3983.  swap d2
  3984.  
  3985.  
  3986. ; moveq #0,d6
  3987. ; sub.w d3,d2
  3988. ; blt.s .nocol
  3989. ;.makecol
  3990. ; addq #1,d6
  3991. ; sub.w d3,d2
  3992. ; bge.s .makecol
  3993. ;.nocol
  3994. ; add.w d3,d2
  3995.  
  3996.  move.w d3,d4
  3997.  move.w d3,d5
  3998.  subq #1,d5
  3999.  
  4000.  move.w d6,d1
  4001.  addq #1,d1
  4002.  move.w d1,a6
  4003.  move.w d2,a5
  4004.  
  4005.  moveq #0,d1
  4006.  move.w sbr,d1
  4007.  move.w fbr,d2
  4008.  sub.w d1,d2
  4009.  ext.l d2
  4010.  asl.w #8,d2
  4011.  asl.w #3,d2
  4012.  divs d3,d2 
  4013.  ext.l d2
  4014.  asl.l #5,d2
  4015.  swap d1
  4016.  
  4017. .pixlopleft:
  4018.  
  4019.  swap d1
  4020.  move.w d1,(a4)+
  4021.  swap d1
  4022.  add.l d2,d1
  4023.  
  4024.  sub.w a5,d4
  4025.  bge.s .nobigstepl
  4026.  sub.w a6,d0
  4027.  add.w d3,d4
  4028.  move.w d0,(a3)+
  4029.  dbra d5,.pixlopleft
  4030.  bra lineflatGOUR
  4031.  
  4032. .nobigstepl
  4033.  sub.w d6,d0
  4034.  move.w d0,(a3)+
  4035.  dbra d5,.pixlopleft
  4036.  bra lineflatGOUR
  4037.  
  4038. lineonrightGOUR:
  4039.  
  4040.  lea (a3,d1*2),a3
  4041.  
  4042.  lea rightbrighttab-rightsidetab(a3),a4
  4043.  
  4044.  cmp.w top(pc),d1
  4045.  bge.s .nonewtop
  4046.  move.w d1,top
  4047. .nonewtop:
  4048.  cmp.w bottom(pc),d3
  4049.  ble.s .nonewbot
  4050.  move.w d3,bottom
  4051. .nonewbot:
  4052.  
  4053.  sub.w d1,d3    ; dy
  4054.  sub.w d0,d2    ; dx
  4055.  blt .linegoingleft
  4056. ; addq #1,d0
  4057.  ext.l d2
  4058.  divs d3,d2
  4059.  move.w d2,d6
  4060.  swap d2
  4061.  
  4062. ; moveq #0,d6
  4063. ; sub.w d3,d2
  4064. ; blt.s .noco
  4065. ;.makeco
  4066. ; addq #1,d6
  4067. ; sub.w d3,d2
  4068. ; bge.s .makeco
  4069. ;.noco
  4070. ; add.w d3,d2
  4071.  
  4072.  move.w d3,d4
  4073.  move.w d3,d5
  4074.  subq #1,d5
  4075.  move.w d6,d1
  4076.  addq #1,d1
  4077.  
  4078.  move.w d1,a6
  4079.  move.w d2,a5
  4080.  
  4081.  moveq #0,d1
  4082.  move.w fbr,d1
  4083.  move.w sbr,d2
  4084.  sub.w d1,d2
  4085.  ext.l d2
  4086.  asl.w #8,d2
  4087.  asl.w #3,d2
  4088.  divs d3,d2 
  4089.  ext.l d2
  4090.  asl.l #5,d2
  4091.  swap d1
  4092.  
  4093. .pixlopright:
  4094.  
  4095.  swap d1
  4096.  move.w d1,(a4)+
  4097.  swap d1
  4098.  add.l d2,d1
  4099.  
  4100.  sub.w a5,d4
  4101.  bge.s .nobigstep
  4102.  add.w a6,d0
  4103.  add.w d3,d4
  4104.  move.w d0,(a3)+
  4105.  dbra d5,.pixlopright
  4106.  bra lineflatGOUR
  4107.  
  4108. .nobigstep
  4109.  add.w d6,d0
  4110.  move.w d0,(a3)+
  4111.  dbra d5,.pixlopright
  4112.  bra lineflatGOUR
  4113.  
  4114. .linegoingleft:
  4115. ; addq #1,d0
  4116.  neg.w d2
  4117.  
  4118.  ext.l d2
  4119.  divs d3,d2
  4120.  move.w d2,d6
  4121.  swap d2
  4122.  
  4123.  
  4124. ; moveq #0,d6
  4125. ; sub.w d3,d2
  4126. ; blt.s .nocol
  4127. ;.makecol
  4128. ; addq #1,d6
  4129. ; sub.w d3,d2
  4130. ; bge.s .makecol
  4131. ;.nocol
  4132. ; add.w d3,d2
  4133.  
  4134.  move.w d3,d4
  4135.  move.w d3,d5
  4136.  subq #1,d5
  4137.  move.w d6,d1
  4138.  addq #1,d1
  4139.  move.w d1,a6
  4140.  move.w d2,a5
  4141.  
  4142.  moveq #0,d1
  4143.  move.w fbr,d1
  4144.  move.w sbr,d2
  4145.  sub.w d1,d2
  4146.  ext.l d2
  4147.  asl.w #8,d2
  4148.  asl.w #3,d2
  4149.  divs d3,d2 
  4150.  ext.l d2
  4151.  asl.l #5,d2
  4152.  swap d1
  4153.  
  4154. .pixlopleft:
  4155.  
  4156.  swap d1
  4157.  move.w d1,(a4)+
  4158.  swap d1
  4159.  add.l d2,d1
  4160.  
  4161.  move.w d0,(a3)+
  4162.  sub.w a5,d4
  4163.  bge.s .nobigstepl
  4164.  sub.w a6,d0
  4165.  add.w d3,d4
  4166.  dbra d5,.pixlopleft
  4167.  bra lineflatGOUR
  4168.  
  4169. .nobigstepl
  4170.  sub.w d6,d0
  4171.  dbra d5,.pixlopleft
  4172.  
  4173. lineflatGOUR:
  4174.  
  4175. bothbehindGOUR:
  4176.  dbra d7,sideloopGOUR
  4177.  
  4178. pastsides:
  4179.  
  4180.  
  4181.  addq #2,a0
  4182.  
  4183.  move.w #104*4,linedir
  4184.  move.l frompt,a6
  4185.  add.l #104*4*41,a6
  4186.  move.w (a0)+,scaleval
  4187.  move.w (a0)+,whichtile
  4188.  move.w (a0)+,d6
  4189.  add.w ZoneBright,d6
  4190.  move.w d6,lighttype
  4191.  move.w above(pc),d6
  4192.  beq groundfloor
  4193. * on ceiling:
  4194.  move.w #-104*4,linedir
  4195.  suba.w #104*4,a6
  4196. groundfloor:
  4197.  
  4198.  move.w xoff,d6
  4199.  move.w zoff,d7
  4200.  add.w xwobxoff,d7
  4201.  add.w xwobzoff,d6
  4202.  swap d6
  4203.  swap d7
  4204.  clr.w d6
  4205.  clr.w d7
  4206.  move.w scaleval(pc),d3
  4207.  beq.s .samescale
  4208.  bgt.s .scaledown
  4209.  neg.w d3
  4210.  asr.l d3,d7
  4211.  asr.l d3,d6
  4212.  bra.s .samescale
  4213. .scaledown:
  4214.  asl.l d3,d6
  4215.  asl.l d3,d7
  4216. .samescale
  4217.  move.l d6,sxoff
  4218.  move.l d7,szoff
  4219.  bra pastscale 
  4220.  
  4221.  asr.l #3,d1
  4222.  asr.l #3,d2
  4223.  asr.l #2,d1
  4224.  asr.l #2,d2
  4225.  asr.l #1,d1
  4226.  asr.l #1,d2
  4227. scaleprogfrom
  4228.  nop
  4229.  nop
  4230.  asl.l #1,d1
  4231.  asl.l #1,d2
  4232.  asl.l #2,d1
  4233.  asl.l #2,d2
  4234.  asl.l #3,d1
  4235.  asl.l #3,d2
  4236.  
  4237. top: dc.w 0
  4238. bottom: dc.w 0
  4239. ypos: dc.l 0
  4240. nfloors: dc.w 0
  4241. lighttype: dc.w 0
  4242. above: dc.w 0 
  4243. linedir: dc.w 0
  4244. distaddr: dc.w 0
  4245.  
  4246. minz: dc.w 0
  4247. leftsidetab:
  4248.  ds.w 180
  4249. rightsidetab:
  4250.  ds.w 180
  4251. leftbrighttab:
  4252.  ds.w 180
  4253. rightbrighttab:
  4254.  ds.w 180
  4255.  
  4256. PointBrights:
  4257.  dc.l 0
  4258. CurrentPointBrights:
  4259.  ds.l 250
  4260.  
  4261. movespd: dc.w 0
  4262. largespd: dc.l 0
  4263.  
  4264. pastscale:
  4265.  
  4266.  tst.b drawit(pc)
  4267.  beq dontdrawfloor
  4268.  
  4269.  move.l a0,-(a7)
  4270.  
  4271.  move.l #leftsidetab,a4
  4272.  move.w top(pc),d1
  4273.  move.w bottom(pc),d7
  4274.  tst.w above
  4275.  beq.s clipfloor
  4276.  
  4277.  move.w #40,d3
  4278.  move.w d3,d4
  4279.  sub.w topclip,d3
  4280.  sub.w botclip,d4
  4281.  cmp.w d3,d1
  4282.  bge predontdrawfloor
  4283.  cmp.w d4,d7
  4284.  blt predontdrawfloor
  4285.  cmp.w d4,d1
  4286.  bge.s .nocliptoproof
  4287.  move.w d4,d1
  4288. .nocliptoproof
  4289.  cmp.w d3,d7
  4290.  blt doneclip
  4291.  move.w d3,d7
  4292.  bra doneclip
  4293.  
  4294. clipfloor:
  4295.  move.w botclip,d4
  4296.  sub.w #40,d4
  4297.  cmp.w d4,d1
  4298.  bge predontdrawfloor
  4299.  move.w topclip,d3
  4300.  sub.w #40,d3
  4301.  cmp.w d3,d1
  4302.  bge.s .nocliptopfloor
  4303.  move.w d3,d1
  4304. .nocliptopfloor 
  4305.  cmp.w d3,d7
  4306.  ble predontdrawfloor
  4307.  cmp.w d4,d7
  4308.  blt.s .noclipbotfloor
  4309.  move.w d4,d7
  4310. .noclipbotfloor:
  4311.  
  4312. doneclip:
  4313.  
  4314.  lea (a4,d1*2),a4
  4315. ; move.l #dists,a2
  4316.  move.w distaddr,d0
  4317.  muls #64,d0
  4318.  move.l d0,a2
  4319. ; muls #25,d0
  4320. ; adda.w d0,a2
  4321. ; lea (a2,d1*2),a2
  4322.  sub.w d1,d7
  4323.  ble predontdrawfloor 
  4324.  move.w d1,d0
  4325.  bne.s .notzero
  4326.  moveq #1,d0
  4327. .notzero
  4328.  muls linedir,d1
  4329.  add.l d1,a6
  4330.  move.l #floorscalecols,a1
  4331.  move.l LineToUse,a5
  4332.  
  4333.  tst.b gourfloor
  4334.  bne dogourfloor
  4335.  
  4336.  tst.b anyclipping
  4337.  beq dofloornoclip
  4338.  
  4339. dofloor:
  4340. ; move.w (a2)+,d0
  4341.  move.w leftclip(pc),d3
  4342.  move.w rightclip(pc),d4
  4343.  move.w rightsidetab-leftsidetab(a4),d2
  4344.  
  4345.  addq #1,d2
  4346.  cmp.w d3,d2
  4347.  ble.s nodrawline
  4348.  cmp.w d4,d2
  4349.  ble.s noclipright
  4350.  move.w d4,d2
  4351. noclipright:
  4352.  move.w (a4),d1
  4353.  cmp.w d4,d1
  4354.  bge.s nodrawline
  4355.  cmp.w d3,d1
  4356.  bge.s noclipleft
  4357.  move.w d3,d1
  4358. noclipleft:
  4359.  cmp.w d1,d2
  4360.  ble.s nodrawline
  4361.  
  4362.  move.w d1,leftedge
  4363.  move.w d2,rightedge
  4364.  
  4365. ; moveq #0,d1
  4366. ; moveq #0,d3
  4367. ; move.w leftbrighttab-leftsidetab(a4),d1
  4368. ; bge.s .okbl
  4369. ; moveq #0,d1
  4370. ;.okbl:
  4371.  
  4372. ; move.w rightbrighttab-leftsidetab(a4),d3
  4373. ; bge.s .okbr
  4374. ; moveq #0,d3
  4375. ;.okbr:
  4376.  
  4377. ; sub.w d1,d3
  4378. ; asl.w #8,d1
  4379. ; move.l d1,leftbright
  4380. ; swap d3
  4381. ; asr.l #5,d3
  4382. ; divs d5,d3
  4383. ; move.w d3,d5
  4384. ; muls.w d6,d5
  4385. ; asr.l #3,d5
  4386. ; clr.b d5
  4387. ; add.w d5,leftbright+2
  4388.  
  4389. ; ext.l d3
  4390. ; asl.l #5,d3
  4391. ; swap d3
  4392. ; asl.w #8,d3
  4393. ; move.l d3,brightspd
  4394.  
  4395.  move.l a6,a3
  4396.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  4397.  move.l a2,d7
  4398.  divs d0,d7
  4399.  move.w d7,d0
  4400.  jsr (a5)
  4401.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  4402. nodrawline
  4403.  adda.w linedir(pc),a6
  4404.  addq #2,a4
  4405.  addq #1,d0
  4406.  subq #1,d7
  4407.  bgt dofloor
  4408.  
  4409. predontdrawfloor
  4410.  move.l (a7)+,a0
  4411.  
  4412. dontdrawfloor:
  4413.  
  4414.  CACHE_FREEZE_OFF d2
  4415.  rts
  4416.  
  4417. anyclipping: dc.w 0
  4418.  
  4419. dofloornoclip:
  4420. ; move.w (a2)+,d0
  4421.  move.w rightsidetab-leftsidetab(a4),d2
  4422.  addq #1,d2
  4423.  move.w (a4)+,d1
  4424.  move.w d1,leftedge
  4425.  move.w d2,rightedge
  4426.  
  4427. ; sub.w d1,d2
  4428.  
  4429. ; moveq #0,d1
  4430. ; moveq #0,d3
  4431. ; move.w leftbrighttab-leftsidetab(a4),d1
  4432. ; bge.s .okbl
  4433. ; moveq #0,d1
  4434. ;.okbl:
  4435.  
  4436. ; move.w rightbrighttab-leftsidetab(a4),d3
  4437. ; bge.s .okbr
  4438. ; moveq #0,d3
  4439. ;.okbr:
  4440.  
  4441. ; sub.w d1,d3
  4442. ; asl.w #8,d1
  4443. ; move.l d1,leftbright
  4444. ; swap d3
  4445. ; asr.l #5,d3
  4446. ; divs d2,d3
  4447. ; ext.l d3
  4448. ; asl.l #5,d3
  4449. ; swap d3
  4450. ; asl.w #8,d3
  4451. ; move.l d3,brightspd
  4452.  
  4453.  
  4454.  move.l a6,a3
  4455.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  4456.  move.l a2,d7
  4457.  divs d0,d7
  4458.  move.w d7,d0
  4459.  jsr (a5)
  4460.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  4461.  adda.w linedir(pc),a6
  4462.  addq #1,d0
  4463.  subq #1,d7
  4464.  bgt dofloornoclip
  4465.  
  4466.  bra predontdrawfloor
  4467.  
  4468. dogourfloor:
  4469.  tst.b anyclipping
  4470.  beq dofloornoclipGOUR
  4471.  
  4472. dofloorGOUR:
  4473. ; move.w (a2)+,d0
  4474.  move.w leftclip(pc),d3
  4475.  move.w rightclip(pc),d4
  4476.  move.w rightsidetab-leftsidetab(a4),d2
  4477.  
  4478.  move.w d2,d5
  4479.  sub.w (a4),d5
  4480.  addq #1,d5
  4481.  moveq #0,d6
  4482.  
  4483.  addq #1,d2
  4484.  cmp.w d3,d2
  4485.  ble nodrawlineGOUR
  4486.  cmp.w d4,d2
  4487.  ble.s nocliprightGOUR
  4488.  move.w d4,d2
  4489. nocliprightGOUR:
  4490.  move.w (a4),d1
  4491.  cmp.w d4,d1
  4492.  bge nodrawlineGOUR
  4493.  cmp.w d3,d1
  4494.  bge.s noclipleftGOUR
  4495.  move.w d3,d6
  4496.  sub.w d1,d6
  4497.  move.w d3,d1
  4498. noclipleftGOUR:
  4499.  cmp.w d1,d2
  4500.  ble nodrawlineGOUR
  4501.  
  4502.  move.w d1,leftedge
  4503.  move.w d2,rightedge
  4504.  
  4505.  move.l a2,d2
  4506.  divs d0,d2
  4507.  move.w d2,dst
  4508.  asr.w #7,d2
  4509. ; addq #5,d2
  4510. ; add.w lighttype,d2
  4511.  
  4512.  moveq #0,d1
  4513.  moveq #0,d3
  4514.  move.w leftbrighttab-leftsidetab(a4),d1
  4515.  add.w d2,d1
  4516.  
  4517.  bge.s .okbl
  4518.  moveq #0,d1
  4519. .okbl:
  4520.  asr.w #1,d1
  4521.  cmp.w #14,d1
  4522.  ble.s .okdl
  4523.  move.w #14,d1
  4524. .okdl:
  4525.  
  4526.  move.w rightbrighttab-leftsidetab(a4),d3
  4527.  add.w d2,d3
  4528.  bge.s .okbr
  4529.  moveq #0,d3
  4530. .okbr:
  4531.  asr.w #1,d3
  4532.  cmp.w #14,d3
  4533.  ble.s .okdr
  4534.  move.w #14,d3
  4535. .okdr:
  4536.  
  4537.  sub.w d1,d3
  4538.  asl.w #8,d1
  4539.  move.l d1,leftbright
  4540.  swap d3
  4541.  asr.l #5,d3
  4542.  divs d5,d3
  4543.  muls d3,d6
  4544.  asr.w #3,d6
  4545.  clr.b d6
  4546.  add.w #256,d6
  4547.  add.w d6,leftbright+2
  4548.  
  4549.  ext.l d3
  4550.  asl.l #5,d3
  4551.  swap d3
  4552.  asl.w #8,d3
  4553.  move.l d3,brightspd
  4554.  
  4555.  move.l a6,a3
  4556.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  4557.  move.w dst,d0
  4558.  lea floorscalecols,a1
  4559.  move.l #floortile,a0
  4560.  adda.w whichtile,a0
  4561.  jsr pastfloorbright
  4562.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  4563. nodrawlineGOUR
  4564.  adda.w linedir(pc),a6
  4565.  addq #2,a4
  4566.  addq #1,d0
  4567.  subq #1,d7
  4568.  bgt dofloorGOUR
  4569.  
  4570. predontdrawfloorGOUR
  4571.  move.l (a7)+,a0
  4572.  
  4573. dontdrawfloorGOUR:
  4574.  
  4575.  CACHE_FREEZE_OFF d2
  4576.  rts
  4577.  
  4578. dofloornoclipGOUR:
  4579. ; move.w (a2)+,d0
  4580.  move.w rightsidetab-leftsidetab(a4),d2
  4581.  addq #1,d2
  4582.  move.w (a4)+,d1
  4583.  move.w d1,leftedge
  4584.  move.w d2,rightedge
  4585.  
  4586.  sub.w d1,d2
  4587.  
  4588.  move.l a2,d6
  4589.  divs d0,d6
  4590.  move.w d6,d5
  4591.  asr.w #7,d5
  4592. ; addq #5,d5
  4593. ; add.w lighttype,d5
  4594.  
  4595.  moveq #0,d1
  4596.  moveq #0,d3
  4597.  move.w leftbrighttab-leftsidetab(a4),d1
  4598.  add.w d5,d1
  4599.  bge.s .okbl
  4600.  moveq #0,d1
  4601. .okbl:
  4602.  asr.w #1,d1
  4603.  cmp.w #14,d1
  4604.  ble.s .okdl
  4605.  move.w #14,d1
  4606. .okdl:
  4607.  
  4608.  move.w rightbrighttab-leftsidetab(a4),d3
  4609.  add.w d5,d3
  4610.  bge.s .okbr
  4611.  moveq #0,d3
  4612. .okbr:
  4613.  asr.w #1,d3
  4614.  cmp.w #14,d3
  4615.  ble.s .okdr
  4616.  move.w #14,d3
  4617. .okdr:
  4618.  
  4619.  sub.w d1,d3
  4620.  addq #1,d1
  4621.  asl.w #8,d1
  4622.  move.l d1,leftbright
  4623.  swap d3
  4624.  asr.l #5,d3
  4625.  divs d2,d3
  4626.  ext.l d3
  4627.  asl.l #5,d3
  4628.  swap d3
  4629.  asl.w #8,d3
  4630.  move.l d3,brightspd
  4631.  
  4632.  
  4633.  move.l a6,a3
  4634.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  4635.  move.w d6,d0
  4636.  move.w d0,dst
  4637.  lea floorscalecols,a1
  4638.  move.l #floortile,a0
  4639.  adda.w whichtile,a0
  4640.  jsr pastfloorbright
  4641.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  4642.  adda.w linedir(pc),a6
  4643.  addq #1,d0
  4644.  subq #1,d7
  4645.  bgt dofloornoclipGOUR
  4646.  
  4647.  bra predontdrawfloorGOUR
  4648.  
  4649.  
  4650.  
  4651. dists:
  4652. ; incbin "floordists"
  4653. drawit: dc.w 0
  4654.  
  4655. LineToUse: dc.l 0
  4656.  
  4657. ***************************
  4658. * Right then, time for the floor
  4659. * routine...
  4660. * For test purposes, give it
  4661. * a3 = point to screen
  4662. * d0= z distance away
  4663. * and sinval+cosval must be set up.
  4664. ***************************
  4665.  
  4666. leftedge: dc.w 0
  4667. rightedge: dc.w 0
  4668.  
  4669. rndpt: dc.l rndtab
  4670.  
  4671. WaterFloorLine:
  4672.  
  4673.  CACHE_OFF d2
  4674.  
  4675.  move.l rndpt,a2
  4676.  move.w (a2)+,d1
  4677.  move.w (a2)+,d2
  4678.  move.w (a2)+,d3
  4679.  cmp.l #endrnd-4,a2
  4680.  blt.s okrnd
  4681.  suba.w #98,a2
  4682. okrnd: 
  4683.  move.l a2,rndpt
  4684.  
  4685.  asr.w #7,d0
  4686.  move.w d0,d1
  4687.  move.w d0,d2
  4688.  move.w d0,d3
  4689.  move.l clipd(pc,d1.w*4),d1
  4690.  move.l clipd(pc,d2.w*4),d2
  4691.  move.l clipd(pc,d3.w*4),d3
  4692.  bra pcli
  4693.  
  4694.  dc.l 0
  4695. clipd:
  4696.  dc.l 0
  4697.  dc.l 512
  4698.  dc.l 512*2
  4699.  dc.l 512*3
  4700.  dc.l 512*4
  4701.  dc.l 512*5
  4702.  dc.l 512*6
  4703.  dc.l 512*7
  4704.  dc.l 512*8
  4705.  dc.l 512*9
  4706.  dc.l 512*10
  4707.  dc.l 512*11
  4708.  dc.l 512*12
  4709.  dc.l 512*13
  4710.  dc.l 512*14
  4711.  dc.l 512*15
  4712.  dc.l 512*15
  4713.  dc.l 512*15
  4714.  dc.l 512*15
  4715.  dc.l 512*15
  4716.  dc.l 512*15
  4717.  dc.l 512*15
  4718.  dc.l 512*15
  4719.  dc.l 512*15
  4720.  dc.l 512*15
  4721.  dc.l 512*15
  4722.  dc.l 512*15
  4723.  
  4724. pcli:
  4725.  
  4726.  move.l #brightentab,a2
  4727.  move.l a2,a4
  4728.  move.l a4,a5
  4729.  add.l d1,a2
  4730.  add.l d2,a4
  4731.  add.l d3,a5
  4732.  
  4733.  move.l #doacrossline,a1
  4734.  move.w leftedge(pc),d1
  4735.  move.w rightedge(pc),d2
  4736.  sub.w d1,d2
  4737.  move.w time(pc,d1.w*2),d1
  4738.  move.w time(pc,d2.w*2),d2
  4739.  lea (a1,d1.w),a1
  4740.  move.w (a1,d2.w),d4
  4741.  move.w #$4e75,(a1,d2.w)
  4742.  
  4743.  moveq #0,d0
  4744.  jsr (a1)
  4745.  move.w d4,(a1,d2.w)
  4746.  
  4747.  CACHE_ON d2
  4748.  
  4749.  rts
  4750.  
  4751. time:
  4752. val SET 0
  4753.  REPT 100
  4754.  dc.w val
  4755. val SET val+10
  4756.  ENDR
  4757.  
  4758. storeit: dc.l 0
  4759.  
  4760. doacrossline:
  4761.  incbin "Doacrossline"
  4762.  rts
  4763.  
  4764. dst: dc.w 0
  4765.  
  4766. FloorLine:
  4767.  
  4768.  move.l #floortile,a0
  4769.  adda.w whichtile,a0
  4770.  move.w lighttype,d1
  4771.  
  4772.  move.w d0,dst
  4773.  
  4774.  move.w d0,d2
  4775. *********************
  4776. * Old version
  4777.  asr.w #7,d2
  4778.  add.w #5,d1
  4779. *********************
  4780. ; asr.w #3,d2
  4781. ; sub.w #4,d2
  4782. ; cmp.w #6,d2
  4783. ; blt.s flbrbr
  4784. ; move.w #6,d2
  4785. ;flbrbr:
  4786. *********************
  4787.  add.w d2,d1
  4788.  bge.s .fixedbright
  4789.  moveq #0,d1
  4790. .fixedbright:
  4791.  cmp.w #28,d1
  4792.  ble.s .smallbright
  4793.  move.w #28,d1
  4794. .smallbright:
  4795.  lea floorscalecols,a1
  4796.  add.l floorbright(pc,d1.w*4),a1
  4797.  bra pastfloorbright
  4798.  
  4799. ConstCol: dc.w 0
  4800.  
  4801. BumpLine:
  4802.  
  4803.  tst.b smoothbumps
  4804.  beq.s Chunky
  4805.  
  4806.  move.l #SmoothTile,a0
  4807.  lea Smoothscalecols,a1
  4808.  bra pastast
  4809.  
  4810. Chunky:
  4811.  
  4812.  moveq #0,d2
  4813.  move.l #Bumptile,a0
  4814.  move.w whichtile,d2
  4815.  adda.w d2,a0
  4816.  ror.l #2,d2
  4817.  lsr.w #6,d2
  4818.  rol.l #2,d2
  4819.  and.w #15,d2
  4820.  move.l #ConstCols,a1
  4821.  move.w (a1,d2.w*2),ConstCol
  4822.  lea Bumpscalecols,a1
  4823.  
  4824. pastast:
  4825.  move.w lighttype,d1
  4826.  
  4827.  move.w d0,dst
  4828.  
  4829.  move.w d0,d2
  4830. *********************
  4831. * Old version
  4832.  asr.w #7,d2
  4833.  add.w #5,d1
  4834. *********************
  4835. ; asr.w #3,d2
  4836. ; sub.w #4,d2
  4837. ; cmp.w #6,d2
  4838. ; blt.s flbrbr
  4839. ; move.w #6,d2
  4840. ;flbrbr:
  4841. *********************
  4842.  add.w d2,d1
  4843.  bge.s .fixedbright
  4844.  moveq #0,d1
  4845. .fixedbright:
  4846.  cmp.w #28,d1
  4847.  ble.s .smallbright
  4848.  move.w #28,d1
  4849. .smallbright:
  4850.  add.l floorbright(pc,d1.w*4),a1
  4851.  bra pastfloorbright
  4852.  
  4853.  
  4854. floorbright:
  4855.  dc.l 512*0
  4856.  dc.l 512*1
  4857.  dc.l 512*1
  4858.  dc.l 512*2
  4859.  dc.l 512*2
  4860.  
  4861.  dc.l 512*3
  4862.  dc.l 512*3
  4863.  dc.l 512*4
  4864.  dc.l 512*4
  4865.  dc.l 512*5
  4866.  
  4867.  dc.l 512*5
  4868.  dc.l 512*6
  4869.  dc.l 512*6
  4870.  dc.l 512*7
  4871.  dc.l 512*7
  4872.  
  4873.  dc.l 512*8
  4874.  dc.l 512*8
  4875.  dc.l 512*9
  4876.  dc.l 512*9
  4877.  dc.l 512*10
  4878.  
  4879.  dc.l 512*10
  4880.  dc.l 512*11
  4881.  dc.l 512*11
  4882.  dc.l 512*12
  4883.  dc.l 512*12
  4884.  
  4885.  dc.l 512*13
  4886.  dc.l 512*13
  4887.  dc.l 512*14
  4888.  dc.l 512*14
  4889.  
  4890. widthleft: dc.w 0
  4891. scaleval: dc.w 0
  4892. sxoff: dc.l 0
  4893. szoff: dc.l 0
  4894. xoff34: dc.w 0
  4895. zoff34: dc.w 0
  4896. scosval: dc.w 0
  4897. ssinval: dc.w 0
  4898.  
  4899.  
  4900. floorsetbright:
  4901.  move.l #walltiles,a0
  4902.  
  4903. pastfloorbright
  4904.  
  4905.  
  4906.  move.w d0,d1
  4907.  muls cosval,d1    ; change in x across whole width
  4908.  move.w d0,d2
  4909.  muls sinval,d2    ; change in z across whole width
  4910.  neg.l d2
  4911. scaleprog:
  4912.  move.w scaleval(pc),d3
  4913.  beq.s .samescale
  4914.  bgt.s .scaledown
  4915.  neg.w d3
  4916.  asr.l d3,d1
  4917.  asr.l d3,d2
  4918.  bra.s .samescale
  4919. .scaledown:
  4920.  asl.l d3,d1
  4921.  asl.l d3,d2
  4922. .samescale
  4923.  
  4924.  move.l d1,d3 ;    z cos
  4925.  move.l d3,d6
  4926.  move.l d3,d5
  4927.  asr.l #1,d6
  4928.  add.l d6,d3
  4929.  asr.l #1,d3
  4930.  
  4931.  move.l d2,d4    ; z sin
  4932.  move.l d4,d6
  4933.  asr.l #1,d6
  4934.  add.l d4,d6
  4935.  add.l d3,d4
  4936.  neg.l d4    ; start x
  4937.  
  4938.  asr.l #1,d6    ; zsin/2
  4939.  sub.l d6,d5    ; start z
  4940.  
  4941.  add.l sxoff,d4
  4942.  add.l szoff,d5
  4943.  
  4944.  moveq #0,d6
  4945.  move.w leftedge(pc),d6
  4946.  beq.s nomultleft
  4947.  
  4948.  move.l d1,a4
  4949.  move.l d2,a5
  4950.  
  4951.  muls.l d6,d3:d1
  4952.  asr.l #6,d1
  4953.  add.l d1,d4
  4954.  
  4955.  muls.l d6,d3:d2
  4956.  asr.l #6,d2
  4957.  add.l d2,d5
  4958.  move.l a4,d1
  4959.  move.l a5,d2
  4960.  
  4961. nomultleft:
  4962.  
  4963.  move.w d4,startsmoothx
  4964.  move.w d5,startsmoothz
  4965.  
  4966.  swap d4
  4967.  asr.l #8,d5
  4968. ; add.w szoff,d5
  4969. ; add.w sxoff,d4
  4970.  and.w #63,d4
  4971.  and.w #63*256,d5
  4972.  move.b d4,d5
  4973.  
  4974.  asr.l #6,d1
  4975.  asr.l #6,d2
  4976.  move.w d1,a4
  4977.  move.w d2,a5
  4978.  asr.l #8,d2
  4979.  and.w #%0011111100000000,d2
  4980.  swap d1
  4981.  add.w d1,d2
  4982.  move.w #%11111100111111,d1
  4983.  and.w d1,d5
  4984.  swap d5
  4985.  move.w startsmoothz,d5
  4986.  swap d5
  4987.  swap d2
  4988.  move.w a5,d2
  4989.  swap d2
  4990.  
  4991. ***********************************
  4992.  
  4993.  move.w d6,a2
  4994.  move.l d2,d6
  4995.  add.w #256,d6
  4996.  
  4997.  moveq #0,d0
  4998.  
  4999.  tst.w a2
  5000.  beq startatleftedge
  5001.  
  5002.  move.w widthleft(pc),d4
  5003.  
  5004.  move.w rightedge(pc),d3
  5005.  
  5006.  cmp.w #31,a2
  5007.  bgt.s notinfirststrip
  5008.  lea (a3,a2.w*4),a3
  5009.  cmp.w #32,d3
  5010.  ble.s allinfirststrip
  5011.  move.w #32,d7
  5012.  sub.w d7,d3
  5013.  sub.w a2,d7
  5014.  bra intofirststrip
  5015.  
  5016. allinfirststrip
  5017.  sub.w a2,d3
  5018.  move.w d3,d7
  5019.  move.w #0,d4
  5020.  bra allintofirst
  5021.  
  5022. notinfirststrip:
  5023.  sub.w #32,a2
  5024.  sub.w #32,d3
  5025.  adda.w #33*4,a3
  5026.  cmp.w #31,a2
  5027.  bgt.s notstartinsec
  5028.  lea (a3,a2.w*4),a3
  5029.  cmp.w #32,d3
  5030.  ble.s allinsecstrip
  5031.  move.w #32,d7
  5032.  sub.w d7,d3
  5033.  sub.w a2,d7
  5034.  move.w d3,d4
  5035.  bra allintofirst
  5036.  
  5037. allinsecstrip
  5038.  sub.w a2,d3
  5039.  move.w d3,d7
  5040.  move.w #0,d4
  5041.  bra allintofirst
  5042.  rts
  5043.  
  5044. prot8: dc.w 0
  5045.  
  5046. notstartinsec:
  5047.  sub.w #32,a2
  5048.  sub.w #32,d3
  5049.  adda.w #33*4,a3
  5050.  lea (a3,a2.w*4),a3
  5051.  cmp.w #32,d3
  5052.  ble.s allinthirdstrip
  5053.  move.w #32,d7
  5054.  sub.w d7,d3
  5055.  sub.w a2,d7
  5056.  move.w d3,d4
  5057.  bra allintofirst
  5058.  rts
  5059.  
  5060. allinthirdstrip
  5061.  sub.w a2,d3
  5062.  move.w d3,d7
  5063.  move.w #0,d4
  5064.  bra allintofirst
  5065.  rts
  5066.  
  5067. startatleftedge:
  5068.  
  5069.  move.w rightedge(pc),d3
  5070.  sub.w a2,d3
  5071.  
  5072.  move.w d3,d7
  5073.  cmp.w #32,d7
  5074.  ble.s .notoowide
  5075.  move.w #32,d7
  5076. .notoowide:
  5077.  sub.w d7,d3
  5078. intofirststrip:
  5079.  
  5080.  move.w d3,d4
  5081. allintofirst:
  5082.  
  5083.  move.w startsmoothx,d3
  5084.  
  5085. tstwat:
  5086.  
  5087.  tst.b gourfloor
  5088.  bne gouraudfloor
  5089.  
  5090.  tst.b usewater
  5091.  bne texturedwater
  5092.  
  5093.  
  5094. ******************************
  5095. * BumpMap the floor/ceiling! *
  5096.  tst.b usebumps
  5097.  bne.s BumpMap
  5098. ******************************
  5099.  
  5100. ordinary:
  5101.  moveq #0,d0
  5102.  
  5103.  dbra d7,acrossscrn
  5104.  rts
  5105.  
  5106. usebumps: dc.w $0
  5107. smoothbumps: dc.w $0
  5108. gourfloor: dc.w 0
  5109.  
  5110.  include "ab3:source/bumpmap.s"
  5111.  
  5112.  CNOP 0,4
  5113. backbefore:
  5114.  and.w d1,d5
  5115.  move.b (a0,d5.w*4),d0
  5116.  add.w a4,d3
  5117.  move.w (a1,d0.w*2),(a3)
  5118.  addq #4,a3
  5119.  addx.l d6,d5
  5120.  dbcs d7,acrossscrn
  5121.  dbcc d7,backbefore
  5122.  bra.s past1
  5123.  
  5124. acrossscrn:
  5125.  and.w d1,d5
  5126.  move.b (a0,d5.w*4),d0
  5127.  add.w a4,d3
  5128.  move.w (a1,d0.w*2),(a3)
  5129.  addq #4,a3
  5130.  addx.l d2,d5
  5131.  dbcs d7,acrossscrn
  5132.  dbcc d7,backbefore
  5133. past1:
  5134.  bcc.s gotoacross
  5135.  
  5136.  move.w d4,d7
  5137.  bne.s .notdoneyet
  5138.  CACHE_FREEZE_ON d2
  5139.  rts
  5140. .notdoneyet:
  5141.  
  5142.  cmp.w #32,d7
  5143.  ble.s .notoowide
  5144.  move.w #32,d7
  5145. .notoowide
  5146.  sub.w d7,d4  
  5147.  addq #4,a3
  5148.  
  5149.  dbra d7,backbefore
  5150.  CACHE_FREEZE_ON d2
  5151.  rts
  5152.  
  5153.  
  5154. gotoacross:
  5155.  
  5156.  move.w d4,d7
  5157.  bne.s .notdoneyet
  5158.  CACHE_FREEZE_ON d2
  5159.  rts
  5160. .notdoneyet:
  5161.  
  5162.  cmp.w #32,d7
  5163.  ble.s .notoowide
  5164.  move.w #32,d7
  5165. .notoowide
  5166.  sub.w d7,d4  
  5167.  addq #4,a3
  5168.  
  5169.  dbra d7,acrossscrn
  5170.  CACHE_FREEZE_ON d2
  5171.  rts
  5172.  
  5173. leftbright: dc.l 0
  5174. brightspd: dc.l 0
  5175.  
  5176. gouraudfloor:
  5177.  move.l leftbright,d0
  5178.  move.l brightspd,d1
  5179.  dbra d7,acrossscrngour
  5180.  rts
  5181.  
  5182.  CNOP 0,4
  5183. backbeforegour:
  5184.  and.w #63*256+63,d5
  5185.  move.b (a0,d5.w*4),d0
  5186.  add.l d1,d0
  5187.  bcc.s .nomoreb
  5188.  add.w #256,d0
  5189. .nomoreb:
  5190.  add.w a4,d3
  5191.  move.w (a1,d0.w*2),(a3)
  5192.  addq #4,a3 
  5193.  addx.l d6,d5
  5194.  dbcs d7,acrossscrngour
  5195.  dbcc d7,backbeforegour
  5196.  bra.s past1gour
  5197.  
  5198. acrossscrngour:
  5199.  and.w #63*256+63,d5
  5200.  move.b (a0,d5.w*4),d0
  5201.  add.l d1,d0
  5202.  bcc.s .nomoreb
  5203.  add.w #256,d0
  5204. .nomoreb:
  5205.  add.w a4,d3
  5206.  move.w (a1,d0.w*2),(a3)
  5207.  addq #4,a3
  5208.  addx.l d2,d5
  5209.  dbcs d7,acrossscrngour
  5210.  dbcc d7,backbeforegour
  5211. past1gour:
  5212.  bcc.s gotoacrossgour
  5213.  
  5214.  move.w d4,d7
  5215.  bne.s .notdoneyet
  5216.  move.l d0,leftbright
  5217.  
  5218.  CACHE_FREEZE_ON d2
  5219.  rts
  5220. .notdoneyet:
  5221.  
  5222.  cmp.w #32,d7
  5223.  ble.s .notoowide
  5224.  move.w #32,d7
  5225. .notoowide
  5226.  sub.w d7,d4  
  5227.  addq #4,a3
  5228.  
  5229.  dbra d7,backbeforegour
  5230.  CACHE_FREEZE_ON d2
  5231.  rts
  5232.  
  5233.  
  5234. gotoacrossgour:
  5235.  
  5236.  move.w d4,d7
  5237.  bne.s .notdoneyet
  5238.  CACHE_FREEZE_ON d2
  5239.  rts
  5240. .notdoneyet:
  5241.  
  5242.  cmp.w #32,d7
  5243.  ble.s .notoowide
  5244.  move.w #32,d7
  5245. .notoowide
  5246.  sub.w d7,d4  
  5247.  addq #4,a3
  5248.  
  5249.  dbra d7,acrossscrngour
  5250.  CACHE_FREEZE_ON d2
  5251.  rts
  5252.  
  5253.  
  5254. waterpt: dc.l waterlist
  5255.  
  5256. waterlist:
  5257.  dc.l waterfile
  5258.  dc.l waterfile+2
  5259.  dc.l waterfile+256
  5260.  dc.l waterfile+256+2
  5261.  dc.l waterfile+512
  5262.  dc.l waterfile+512+2
  5263.  dc.l waterfile+768
  5264.  dc.l waterfile+768+2
  5265. ; dc.l waterfile+768
  5266. ; dc.l waterfile+512+2
  5267. ; dc.l waterfile+512
  5268. ; dc.l waterfile+256+2
  5269. ; dc.l waterfile+256
  5270. ; dc.l waterfile+2
  5271. endwaterlist:
  5272.  
  5273. watertouse: dc.l waterfile
  5274.  
  5275. wtan: dc.w 0
  5276. wateroff: dc.w 0
  5277.  
  5278. texturedwater:
  5279.  
  5280.  add.w wateroff,d5
  5281.  
  5282.  move.l #brightentab,a1
  5283.  move.w dst,d0
  5284.  clr.b d0
  5285.  add.w d0,d0
  5286.  adda.w d0,a1
  5287.  
  5288.  move.w dst,d0
  5289.  asl.w #7,d0
  5290.  add.w wtan,d0
  5291.  and.w #8191,d0
  5292.  move.l #SineTable,a0
  5293.  move.w (a0,d0.w),d0
  5294.  ext.l d0
  5295.  move.w dst,d3
  5296.  add.w #300,d3
  5297.  divs d3,d0
  5298.  asr.w #6,d0
  5299.  add.w #2,d0
  5300.  
  5301.  move.w dst,d3
  5302.  asr.w #7,d3
  5303.  add.w d3,d0
  5304.  
  5305.  muls #104*4,d0
  5306.  move.w d0,a6
  5307.  
  5308.  move.l watertouse,a0
  5309.  
  5310.  move.w startsmoothx,d3
  5311.  dbra d7,acrossscrnw
  5312.  rts
  5313.  
  5314. backbeforew:
  5315.  and.w d1,d5
  5316.  move.w (a0,d5.w*4),d0
  5317.  move.b 1(a3,a6.w),d0
  5318.  move.w (a1,d0.w*2),(a3)
  5319.  addq #4,a3
  5320.  add.w a4,d3
  5321.  addx.l d6,d5
  5322.  dbcs d7,acrossscrnw
  5323.  dbcc d7,backbeforew
  5324.  bcc.s past1w
  5325.  add.w #256,d5 
  5326.  bra.s past1w
  5327.  
  5328. acrossscrnw:
  5329.  and.w d1,d5
  5330.  move.w (a0,d5.w*4),d0
  5331.  move.b 1(a3,a6.w),d0
  5332.  move.w (a1,d0.w*2),(a3)
  5333.  addq #4,a3
  5334.  add.w a4,d3
  5335.  addx.l d2,d5
  5336.  dbcs d7,acrossscrnw
  5337.  dbcc d7,backbeforew
  5338.  bcc.s past1w
  5339.  add.w #256,d5 
  5340. past1w:
  5341.  
  5342.  move.w d4,d7
  5343.  bne.s .notdoneyet
  5344.  rts
  5345. .notdoneyet:
  5346.  
  5347.  cmp.w #32,d7
  5348.  ble.s .notoowide
  5349.  move.w #32,d7
  5350. .notoowide
  5351.  sub.w d7,d4  
  5352.  addq #4,a3
  5353.  
  5354.  dbra d7,acrossscrnw
  5355.  CACHE_FREEZE_ON d2
  5356.  rts
  5357.  
  5358. usewater: dc.w 0
  5359.  dc.w 0
  5360. startsmoothx: dc.w 0
  5361.  dc.w 0
  5362. startsmoothz: dc.w 0
  5363.  
  5364. ********************************
  5365. *
  5366.  include "AB3:source/ObjDraw3.chipram"
  5367. *
  5368. ********************************
  5369.  
  5370. numframes:
  5371.  dc.w 0
  5372.  
  5373. alframe: dc.l Objects+4096
  5374.  
  5375. alan:
  5376.  dcb.l 8,0
  5377.  dcb.l 8,1
  5378.  dcb.l 8,2
  5379.  dcb.l 8,3
  5380. endalan:
  5381.  
  5382. alanptr: dc.l alan
  5383.  
  5384. Time2: dc.l 0
  5385. dispco:
  5386.  dc.w 0
  5387.  
  5388. KInt_Init    ;VBR Assumed $0
  5389.         move.l $68.w,OLDKINT
  5390.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  5391.         And.b    #$3f,$bfe201        Set Timers
  5392.         Move.b    #$7f,$bfed01
  5393.         Move.b    $bfed01,d0
  5394.         Move.b    #$88,$bfed01
  5395.         St.b    KInt_CCode        
  5396.         Move.b    #$a0,$bfee01        Start Timey Thing
  5397.         Rts                And return
  5398.  
  5399. OLDKINT: dc.l 0
  5400.  
  5401. KInt_Main    
  5402.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  5403.         Move.w    #8,$dff09a        Temp Disable Int.
  5404.         Move.w    $dff01e,d0        Intreqr
  5405.         And.w    #8,d0            Mask Out All X^ K_Int
  5406.     Beq    KInt_End            Not Keyboard Interrupt
  5407.         Lea    $bfed01,a6
  5408.         Move.w    #$8,$dff09c        Clear Int.Request
  5409.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  5410.         Ror.b    #1,d0            Roll to correct
  5411.         Not.b    d0            
  5412.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  5413. .HandShake    Move.b    #8,(a6)
  5414.         Move.b    #7,-$900(a6)
  5415.         Move.b    #0,-$800(a6)
  5416.         Move.b    #0,-$100(a6)
  5417.         Move.b    #$d1,$100(a6)        
  5418.         Tst.b    (a6)    
  5419. .wait        Btst    #0,(a6)
  5420.     Beq.s    .wait
  5421.         Move.b    #$a0,$100(a6)        
  5422.         Move.b    (a6),d0        
  5423.         Move.b    #$88,(a6)
  5424.         Lea    KeyMap,a1
  5425.         Moveq.w    #0,d0
  5426.         Move.b    KInt_CCode(pc),d0
  5427.     Bmi.s    KInt_KeyUp            neg if up 
  5428.  
  5429. KInt_KeyDown
  5430.         st (a1,d0.w)
  5431.     Bra    KInt_End
  5432.  
  5433. KInt_KeyUp
  5434.         And.w    #$7f,d0            Make code Positive
  5435.         clr.b (a1,d0.w)
  5436. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  5437.     
  5438.         Move.w    #$8008,$dff09a        Re-enable Int.
  5439.         Rte
  5440.  
  5441. KInt_CCode    Ds.b    1
  5442. KInt_Askey    Ds.b    1
  5443. KInt_OCode    Ds.w    1
  5444.  
  5445.  
  5446. OldSpace: dc.b 0
  5447. SpaceTapped: dc.b 0
  5448. PLR1_SPCTAP: dc.b 0
  5449. PLR2_SPCTAP: dc.b 0
  5450. PLR1_Ducked: dc.b 0
  5451. PLR2_Ducked: dc.b 0
  5452.  even
  5453.  
  5454.  include "ab3:source/PLR1CONTROL.s"
  5455.  include "ab3:source/PLR2CONTROL.s"
  5456.  
  5457. prot7: dc.w 0
  5458.  
  5459. GOTTOSEND: dc.w 0
  5460.  
  5461. OtherInter:
  5462.  move.w #$0010,$dff000+intreq
  5463.  movem.l d0-d7/a0-a6,-(a7)
  5464.  bra.s justshake
  5465.  
  5466. Chan0inter:
  5467.  
  5468.  move.w #$0010,$dff000+intreq
  5469.  
  5470.  tst.b doanything
  5471.  bne.s dosomething
  5472.  rte
  5473.  
  5474. dosomething:
  5475.  
  5476.  
  5477.  addq.w #1,FramesToDraw
  5478.  movem.l d0-d7/a0-a6,-(a7)
  5479.  
  5480. ; jsr INITREC
  5481. ; jsr RECEIVE
  5482.  
  5483. ; tst.l BUFFER
  5484. ; beq.s justshake
  5485. ; st GOTTOSEND
  5486. ; move.l #OtherInter,$6c
  5487.  
  5488. justshake:
  5489.  
  5490.  cmp.b #'b',Prefsfile+3
  5491.  bne.s .noback
  5492.  jsr mt_music
  5493. .noback:
  5494.  
  5495.  bra dontshowtime
  5496.  
  5497.  tst.b oktodisplay
  5498.  beq dontshowtime
  5499.  clr.b oktodisplay
  5500.  subq.w #1,dispco
  5501.  bgt dontshowtime
  5502.  move.w #10,dispco
  5503.  
  5504.  move.l #TimerScr+10,a0
  5505.  move.l TimeCount,d0
  5506.  bge.s timenotneg
  5507.  move.l #1111*256,d0
  5508. timenotneg:
  5509.  asr.l #8,d0
  5510.  move.l #digits,a1
  5511.  move.w #7,d2
  5512. digitlop
  5513.  divs #10,d0
  5514.  swap d0
  5515.  lea (a1,d0.w*8),a2
  5516.  move.b (a2)+,(a0)
  5517.  move.b (a2)+,24(a0)
  5518.  move.b (a2)+,24*2(a0)
  5519.  move.b (a2)+,24*3(a0)
  5520.  move.b (a2)+,24*4(a0)
  5521.  move.b (a2)+,24*5(a0)
  5522.  move.b (a2)+,24*6(a0)
  5523.  move.b (a2)+,24*7(a0)
  5524.  subq #1,a0
  5525.  swap d0
  5526.  ext.l d0
  5527.  dbra d2,digitlop
  5528.  
  5529.  move.l #TimerScr+10+24*10,a0
  5530.  move.l NumTimes,d0
  5531.  move.l #digits,a1
  5532.  move.w #3,d2
  5533. digitlop2
  5534.  divs #10,d0
  5535.  swap d0
  5536.  lea (a1,d0.w*8),a2
  5537.  move.b (a2)+,(a0)
  5538.  move.b (a2)+,24(a0)
  5539.  move.b (a2)+,24*2(a0)
  5540.  move.b (a2)+,24*3(a0)
  5541.  move.b (a2)+,24*4(a0)
  5542.  move.b (a2)+,24*5(a0)
  5543.  move.b (a2)+,24*6(a0)
  5544.  move.b (a2)+,24*7(a0)
  5545.  subq #1,a0
  5546.  swap d0
  5547.  ext.l d0
  5548.  dbra d2,digitlop2
  5549.  
  5550.  move.l #TimerScr+10+24*20,a0
  5551.  moveq #0,d0
  5552.  move.w FramesToDraw,d0
  5553.  move.l #digits,a1
  5554.  move.w #2,d2
  5555. digitlop3
  5556.  divs #10,d0
  5557.  swap d0
  5558.  lea (a1,d0.w*8),a2
  5559.  move.b (a2)+,(a0)
  5560.  move.b (a2)+,24(a0)
  5561.  move.b (a2)+,24*2(a0)
  5562.  move.b (a2)+,24*3(a0)
  5563.  move.b (a2)+,24*4(a0)
  5564.  move.b (a2)+,24*5(a0)
  5565.  move.b (a2)+,24*6(a0)
  5566.  move.b (a2)+,24*7(a0)
  5567.  subq #1,a0
  5568.  swap d0
  5569.  ext.l d0
  5570.  dbra d2,digitlop3
  5571.  
  5572. dontshowtime:
  5573.  
  5574.  move.w Robotanimpos,d0
  5575.  add.w #6*38,d0
  5576.  cmp.w #6*38*64,d0
  5577.  blt.s norebot
  5578.  move.w #0,d0
  5579. norebot:
  5580.  move.w d0,Robotanimpos
  5581.  
  5582.  tst.w d0
  5583.  seq d1
  5584.  cmp.w #6*32*38,d0
  5585.  seq d2
  5586.  or.b d2,d1
  5587.  or.b d1,clump
  5588.  
  5589.  move.w Robotarmpos,d0
  5590.  add.w #6*14,d0
  5591.  cmp.w #6*14*64,d0
  5592.  blt.s norebot2
  5593.  move.w #0,d0
  5594. norebot2:
  5595.  move.w d0,Robotarmpos
  5596.  
  5597.  move.l alanptr,a0
  5598.  move.l (a0)+,alframe
  5599.  cmp.l #endalan,a0
  5600.  blt.s nostartalan
  5601.  move.l #alan,a0
  5602. nostartalan:
  5603.  move.l a0,alanptr
  5604.  
  5605.  move.l #$dff000,a6
  5606.  
  5607.  cmp.b #'4',Prefsfile+1
  5608.  bne.s nomuckabout
  5609.  
  5610.  move.w #$0,d0 
  5611.  tst.b NoiseMade0LEFT
  5612.  beq.s noturnoff0
  5613.  move.w #1,d0
  5614. noturnoff0:
  5615.  tst.b NoiseMade0RIGHT
  5616.  beq.s noturnoff1
  5617.  or.w #2,d0
  5618. noturnoff1:
  5619.  tst.b NoiseMade1RIGHT
  5620.  beq.s noturnoff2
  5621.  or.w #4,d0
  5622. noturnoff2:
  5623.  tst.b NoiseMade1LEFT
  5624.  beq.s noturnoff3
  5625.  or.w #8,d0
  5626. noturnoff3:
  5627.  move.w d0,dmacon(a6)
  5628.  
  5629. nomuckabout:
  5630.  
  5631.  tst.b READCONTROLS
  5632.  beq.s nocontrols
  5633.  
  5634.  cmp.b #'s',mors
  5635.  beq.s control2
  5636.  
  5637.  tst.b PLR1MOUSE
  5638.  beq.s PLR1_nomouse
  5639.  bsr PLR1_mouse_control
  5640. PLR1_nomouse:
  5641.  tst.b PLR1KEYS
  5642.  beq.s PLR1_nokeys
  5643.  bsr PLR1_keyboard_control
  5644. PLR1_nokeys:
  5645. ; tst.b PLR1PATH
  5646. ; beq.s PLR1_nopath
  5647. ; bsr PLR1_follow_path
  5648. ;PLR1_nopath:
  5649.  tst.b PLR1JOY
  5650.  beq.s PLR1_nojoy
  5651.  bsr PLR1_JoyStick_control
  5652. PLR1_nojoy: 
  5653.  bra.s nocontrols
  5654.  
  5655. control2:
  5656.  tst.b PLR2MOUSE
  5657.  beq.s PLR2_nomouse
  5658.  bsr PLR2_mouse_control
  5659. PLR2_nomouse:
  5660.  tst.b PLR2KEYS
  5661.  beq.s PLR2_nokeys
  5662.  bsr PLR2_keyboard_control
  5663. PLR2_nokeys:
  5664. ; tst.b PLR2PATH
  5665. ; beq.s PLR2_nopath
  5666. ; bsr PLR1_follow_path
  5667. ;PLR2_nopath:
  5668.  tst.b PLR2JOY
  5669.  beq.s PLR2_nojoy
  5670.  bsr PLR2_JoyStick_control
  5671. PLR2_nojoy: 
  5672.  
  5673.  
  5674. nocontrols:
  5675.  
  5676. ; tst.b PLR2_fire
  5677. ; beq.s firenotpressed2
  5678. ; fire was pressed last time.
  5679. ; btst #7,$bfe001
  5680. ; bne.s firenownotpressed2
  5681. ; fire is still pressed this time.
  5682. ; st PLR2_fire
  5683. ; bra dointer
  5684.  
  5685. firenownotpressed2:
  5686. ; fire has been released.
  5687. ; clr.b PLR2_fire
  5688. ; bra dointer
  5689.  
  5690. firenotpressed2
  5691.  
  5692. ; fire was not pressed last frame...
  5693.  
  5694. ; btst #7,$bfe001
  5695. ; if it has still not been pressed, go back above
  5696. ; bne.s firenownotpressed2
  5697. ; fire was not pressed last time, and was this time, so has
  5698. ; been clicked.
  5699. ; st PLR2_clicked
  5700. ; st PLR2_fire
  5701.  
  5702. dointer
  5703.  
  5704.  cmp.b #'4',Prefsfile+1
  5705.  beq fourchannel
  5706.  
  5707.  btst #1,$dff000+intreqr
  5708.  bne.s newsampbitl
  5709.  
  5710.  movem.l (a7)+,d0-d7/a0-a6
  5711.  
  5712.  rte
  5713.  
  5714.  
  5715. swappedem: dc.w 0
  5716.  
  5717. newsampbitl:
  5718.  
  5719.  move.w #$820f,$dff000+dmacon
  5720.  
  5721.  move.w #$200,$dff000+intreq
  5722.  
  5723. ; tst.b CHANNELDATA
  5724. ; bne nochannel0
  5725.  
  5726.  move.l pos0LEFT,a0
  5727.  move.l pos2LEFT,a1
  5728.  
  5729.  move.l #tab,a2
  5730.  
  5731.  moveq #0,d0
  5732.  moveq #0,d1
  5733.  move.b vol0left,d0
  5734.  move.b vol2left,d1
  5735.  cmp.b d1,d0
  5736.  slt swappedem
  5737.  bge.s fbig0
  5738.  
  5739. ; d1 is bigger so scale d0 and use d1
  5740. ; as audiochannel volume.
  5741.  
  5742.  exg a0,a1
  5743.  asl.w #6,d0
  5744.  divs d1,d0
  5745.  lsl.w #8,d0
  5746.  adda.w d0,a2
  5747.  move.w d1,$dff0a8
  5748.  bra.s donechan0
  5749.  
  5750. fbig0:
  5751.  tst.w d0
  5752.  beq.s donechan0
  5753.  asl.w #6,d1
  5754.  divs d0,d1
  5755.  lsl.w #8,d1
  5756.  adda.w d1,a2
  5757.  move.w d0,$dff0a8
  5758.  
  5759. donechan0:
  5760.  
  5761.  move.l Aupt0,a3
  5762.  move.l a3,$dff0a0
  5763.  move.l Auback0,Aupt0
  5764.  move.l a3,Auback0
  5765.  
  5766.  move.l Auback0,a3
  5767.  
  5768.  moveq #0,d0
  5769.  moveq #0,d1
  5770.  moveq #0,d2
  5771.  moveq #0,d3
  5772.  moveq #0,d4
  5773.  moveq #0,d5
  5774.  move.w #49,d7
  5775. loop:
  5776.  move.l (a0)+,d0
  5777.  move.b (a1)+,d1
  5778.  move.b (a1)+,d2
  5779.  move.b (a1)+,d3
  5780.  move.b (a1)+,d4
  5781.  move.b (a2,d3.w),d5
  5782.  swap d5
  5783.  move.b (a2,d1.w),d5
  5784.  asl.l #8,d5
  5785.  move.b (a2,d2.w),d5
  5786.  swap d5
  5787.  move.b (a2,d4.w),d5
  5788.  add.l d5,d0
  5789.  move.l d0,(a3)+
  5790.  dbra d7,loop
  5791.  
  5792.  tst.b swappedem
  5793.  beq.s .ok23
  5794.  exg a0,a1
  5795. .ok23:
  5796.  
  5797.  cmp.l Samp0endLEFT,a0
  5798.  blt.s .notoffendsamp1
  5799.  move.l #bass,a0
  5800.  move.l #bassend,Samp0endLEFT
  5801.  move.b #63,vol0left
  5802.  st LEFTCHANDATA+1
  5803.  move.w #0,LEFTCHANDATA+2
  5804. .notoffendsamp1:
  5805.  
  5806.  cmp.l Samp2endLEFT,a1
  5807.  blt.s .notoffendsamp2
  5808.  move.l #empty,a1
  5809.  move.l #emptyend,Samp2endLEFT
  5810.  move.b #0,vol2left
  5811.  st LEFTCHANDATA+1+8
  5812.  move.w #0,LEFTCHANDATA+2+8
  5813. .notoffendsamp2:
  5814.  
  5815.  move.l a0,pos0LEFT
  5816.  move.l a1,pos2LEFT
  5817.  
  5818. nochannel0:
  5819.  
  5820.  tst.b CHANNELDATA+16
  5821.  bne nochannel1
  5822.  
  5823.  
  5824.  move.l pos0RIGHT,a0
  5825.  move.l pos2RIGHT,a1
  5826.  
  5827.  move.l Aupt1,a3
  5828.  move.l a3,$dff0b0
  5829.  move.l Auback1,Aupt1
  5830.  move.l a3,Auback1
  5831.  
  5832.  move.l #tab,a2
  5833.  
  5834.  moveq #0,d0
  5835.  moveq #0,d1
  5836.  move.b vol0right,d0
  5837.  move.b vol2right,d1
  5838.  cmp.b d1,d0
  5839.  slt swappedem
  5840.  bge.s fbig1
  5841.  
  5842. ; d1 is bigger so scale d0 and use d1
  5843. ; as audiochannel volume.
  5844.  
  5845.  exg a0,a1
  5846.  asl.w #6,d0
  5847.  divs d1,d0
  5848.  lsl.w #8,d0
  5849.  adda.w d0,a2
  5850.  move.w d1,$dff0b8
  5851.  bra.s donechan1
  5852.  
  5853. fbig1:
  5854.  tst.w d0
  5855.  beq.s donechan1
  5856.  asl.w #6,d1
  5857.  divs d0,d1
  5858.  lsl.w #8,d1
  5859.  adda.w d1,a2
  5860.  move.w d0,$dff0b8
  5861.  
  5862. donechan1:
  5863.  moveq #0,d0
  5864.  moveq #0,d1
  5865.  moveq #0,d2
  5866.  moveq #0,d3
  5867.  moveq #0,d4
  5868.  moveq #0,d5
  5869.  move.w #49,d7
  5870. loop2:
  5871.  move.l (a0)+,d0
  5872.  move.b (a1)+,d1
  5873.  move.b (a1)+,d2
  5874.  move.b (a1)+,d3
  5875.  move.b (a1)+,d4
  5876.  move.b (a2,d3.w),d5
  5877.  swap d5
  5878.  move.b (a2,d1.w),d5
  5879.  asl.l #8,d5
  5880.  move.b (a2,d2.w),d5
  5881.  swap d5
  5882.  move.b (a2,d4.w),d5
  5883.  add.l d5,d0
  5884.  move.l d0,(a3)+
  5885.  dbra d7,loop2
  5886.  
  5887.  tst.b swappedem
  5888.  beq.s ok01
  5889.  exg a0,a1
  5890. ok01:
  5891.  
  5892.  cmp.l Samp0endRIGHT,a0
  5893.  blt.s .notoffendsamp1
  5894.  move.l #empty,a0
  5895.  move.l #emptyend,Samp0endRIGHT
  5896.  move.b #0,vol0right
  5897.  st RIGHTCHANDATA+1
  5898.  move.w #0,RIGHTCHANDATA+2
  5899. .notoffendsamp1:
  5900.  
  5901.  cmp.l Samp2endRIGHT,a1
  5902.  blt.s .notoffendsamp2
  5903.  move.l #empty,a1
  5904.  move.l #emptyend,Samp2endRIGHT
  5905.  move.b #0,vol2right
  5906.  st RIGHTCHANDATA+1+8
  5907.  move.w #0,RIGHTCHANDATA+2+8
  5908. .notoffendsamp2:
  5909.  
  5910.  move.l a0,pos0RIGHT
  5911.  move.l a1,pos2RIGHT
  5912.  
  5913. nochannel1:
  5914.  
  5915. ******************* Other two channels
  5916.  
  5917.  move.l pos1LEFT,a0
  5918.  move.l pos3LEFT,a1
  5919.  
  5920.  move.l #tab,a2
  5921.  
  5922.  moveq #0,d0
  5923.  moveq #0,d1
  5924.  move.b vol1left,d0
  5925.  move.b vol3left,d1
  5926.  cmp.b d1,d0
  5927.  slt swappedem
  5928.  bge.s fbig2
  5929.  
  5930. ; d1 is bigger so scale d0 and use d1
  5931. ; as audiochannel volume.
  5932.  
  5933.  exg a0,a1
  5934.  asl.w #6,d0
  5935.  divs d1,d0
  5936.  lsl.w #8,d0
  5937.  adda.w d0,a2
  5938.  move.w d1,$dff0d8
  5939.  bra.s donechan2
  5940.  
  5941. fbig2:
  5942.  tst.w d0
  5943.  beq.s donechan2
  5944.  asl.w #6,d1
  5945.  divs d0,d1
  5946.  lsl.w #8,d1
  5947.  adda.w d1,a2
  5948.  move.w d0,$dff0d8
  5949.  
  5950. donechan2:
  5951.  
  5952.  move.l Aupt2,a3
  5953.  move.l a3,$dff0d0
  5954.  move.l Auback2,Aupt2
  5955.  move.l a3,Auback2
  5956.  
  5957.  moveq #0,d0
  5958.  moveq #0,d1
  5959.  moveq #0,d2
  5960.  moveq #0,d3
  5961.  moveq #0,d4
  5962.  moveq #0,d5
  5963.  move.w #49,d7
  5964. loop3:
  5965.  move.l (a0)+,d0
  5966.  move.b (a1)+,d1
  5967.  move.b (a1)+,d2
  5968.  move.b (a1)+,d3
  5969.  move.b (a1)+,d4
  5970.  move.b (a2,d3.w),d5
  5971.  swap d5
  5972.  move.b (a2,d1.w),d5
  5973.  asl.l #8,d5
  5974.  move.b (a2,d2.w),d5
  5975.  swap d5
  5976.  move.b (a2,d4.w),d5
  5977.  add.l d5,d0
  5978.  move.l d0,(a3)+
  5979.  dbra d7,loop3
  5980.  
  5981.  tst.b swappedem
  5982.  beq.s .ok23
  5983.  exg a0,a1
  5984. .ok23:
  5985.  
  5986.  cmp.l Samp1endLEFT,a0
  5987.  blt.s .notoffendsamp3
  5988.  move.l #empty,a0
  5989.  move.l #emptyend,Samp1endLEFT
  5990.  move.b #0,vol1left
  5991.  st LEFTCHANDATA+1+4
  5992.  move.w #0,LEFTCHANDATA+2+4
  5993. .notoffendsamp3:
  5994.  
  5995.  cmp.l Samp3endLEFT,a1
  5996.  blt.s .notoffendsamp4
  5997.  move.l #empty,a1
  5998.  move.l #emptyend,Samp3endLEFT
  5999.  move.b #0,vol3left
  6000.  st LEFTCHANDATA+1+12
  6001.  move.w #0,LEFTCHANDATA+2+12
  6002. .notoffendsamp4:
  6003.  
  6004.  move.l a0,pos1LEFT
  6005.  move.l a1,pos3LEFT
  6006.  
  6007.  move.l pos1RIGHT,a0
  6008.  move.l pos3RIGHT,a1
  6009.  
  6010.  move.l Aupt3,a3
  6011.  move.l a3,$dff0c0
  6012.  move.l Auback3,Aupt3
  6013.  move.l a3,Auback3
  6014.  
  6015.  move.l #tab,a2
  6016.  
  6017.  moveq #0,d0
  6018.  moveq #0,d1
  6019.  move.b vol1right,d0
  6020.  move.b vol3right,d1
  6021.  cmp.b d1,d0
  6022.  slt.s swappedem
  6023.  bge.s fbig3
  6024.  
  6025.  exg a0,a1
  6026.  asl.w #6,d0
  6027.  divs d1,d0
  6028.  lsl.w #8,d0
  6029.  adda.w d0,a2
  6030.  move.w d1,$dff0c8
  6031.  bra.s donechan3
  6032.  
  6033. fbig3:
  6034.  tst.w d0
  6035.  beq.s donechan3
  6036.  asl.w #6,d1
  6037.  divs d0,d1
  6038.  lsl.w #8,d1
  6039.  adda.w d1,a2
  6040.  move.w d0,$dff0c8
  6041. donechan3:
  6042.  
  6043.  moveq #0,d0
  6044.  moveq #0,d1
  6045.  moveq #0,d2
  6046.  moveq #0,d3
  6047.  moveq #0,d4
  6048.  moveq #0,d5
  6049.  move.w #49,d7
  6050. loop4:
  6051.  move.l (a0)+,d0
  6052.  move.b (a1)+,d1
  6053.  move.b (a1)+,d2
  6054.  move.b (a1)+,d3
  6055.  move.b (a1)+,d4
  6056.  move.b (a2,d3.w),d5
  6057.  swap d5
  6058.  move.b (a2,d1.w),d5
  6059.  asl.l #8,d5
  6060.  move.b (a2,d2.w),d5
  6061.  swap d5
  6062.  move.b (a2,d4.w),d5
  6063.  add.l d5,d0
  6064.  move.l d0,(a3)+
  6065.  dbra d7,loop4
  6066.  
  6067.  tst.b swappedem
  6068.  beq.s .ok23
  6069.  exg a0,a1
  6070. .ok23:
  6071.  
  6072.  cmp.l Samp1endRIGHT,a0
  6073.  blt.s notoffendsamp3
  6074.  move.l #empty,a0
  6075.  move.l #emptyend,Samp1endRIGHT
  6076.  move.b #0,vol1right
  6077.  st RIGHTCHANDATA+1+4
  6078.  move.w #0,RIGHTCHANDATA+2+4
  6079. notoffendsamp3:
  6080.  
  6081.  cmp.l Samp3endRIGHT,a1
  6082.  blt.s notoffendsamp4
  6083.  move.l #empty,a1
  6084.  move.l #emptyend,Samp3endRIGHT
  6085.  move.b #0,vol3right
  6086.  st RIGHTCHANDATA+1+12
  6087.  move.w #0,RIGHTCHANDATA+2+12
  6088. notoffendsamp4:
  6089.  
  6090.  move.l a0,pos1RIGHT
  6091.  move.l a1,pos3RIGHT
  6092.  
  6093.  movem.l (a7)+,d0-d7/a0-a6
  6094.  tst.b counting
  6095.  beq .nostartcounter
  6096.  JSR STARTCOUNT
  6097. .nostartcounter:
  6098.  
  6099.  rte
  6100.  
  6101. ***********************************
  6102. * 4 channel sound routine
  6103. ***********************************
  6104.  
  6105. fourchannel:
  6106.  
  6107.  
  6108.  
  6109.  move.l #$dff000,a6
  6110.  
  6111.  btst #7,intreqrl(a6)
  6112.  beq.s nofinish0
  6113.  move.w #0,LEFTCHANDATA+2
  6114.  st LEFTCHANDATA+1
  6115.  move.l #bass,$a0(a6)
  6116.  move.w #18370/2,$a4(a6) 
  6117.  move.w #$0080,intreq(a6)
  6118. nofinish0:
  6119.  
  6120.  tst.b NoiseMade0pLEFT
  6121.  beq.s NoChan0sound
  6122.  
  6123.  move.l Samp0endLEFT,d0
  6124.  move.l pos0LEFT,d1
  6125.  sub.l d1,d0
  6126.  lsr.l #1,d0
  6127.  move.w d0,$a4(a6)
  6128.  move.l d1,$a0(a6)
  6129.  move.w #$8201,dmacon(a6)
  6130.  moveq #0,d0
  6131.  move.b vol0left,d0
  6132.  move.w d0,$a8(a6)
  6133.  
  6134. NoChan0sound:
  6135.  
  6136. *****************************************
  6137. *****************************************
  6138.  
  6139.  btst #0,intreqr(a6)
  6140.  beq.s nofinish1
  6141.  move.l #null,$b0(a6)
  6142.  move.w #100,$b4(a6)
  6143.  move.w #$0100,intreq(a6)
  6144. nofinish1:
  6145.  
  6146.  tst.b NoiseMade0pRIGHT
  6147.  beq.s NoChan1sound
  6148.  
  6149.  move.l Samp0endRIGHT,d0
  6150.  move.l pos0RIGHT,d1
  6151.  sub.l d1,d0
  6152.  lsr.l #1,d0
  6153.  move.w d0,$b4(a6)
  6154.  move.l d1,$b0(a6)
  6155.  move.w d0,playnull1
  6156.  move.w #$8202,dmacon(a6)
  6157.  moveq #0,d0
  6158.  move.b vol0right,d0
  6159.  move.w d0,$b8(a6)
  6160.  
  6161. NoChan1sound:
  6162.  
  6163. *****************************************
  6164. *****************************************
  6165.  
  6166.  btst #1,intreqr(a6)
  6167.  beq.s nofinish2
  6168.  move.l #null,$c0(a6)
  6169.  move.w #100,$c4(a6)
  6170.  move.w #$0200,intreq(a6)
  6171. nofinish2:
  6172.  
  6173.  tst.b NoiseMade1pRIGHT
  6174.  beq.s NoChan2sound
  6175.  
  6176.  move.l Samp1endRIGHT,d0
  6177.  move.l pos1RIGHT,d1
  6178.  sub.l d1,d0
  6179.  lsr.l #1,d0
  6180.  move.w d0,$c4(a6)
  6181.  move.w d0,playnull2
  6182.  
  6183.  move.l d1,$c0(a6)
  6184.  move.w #$8204,dmacon(a6)
  6185.  moveq #0,d0
  6186.  move.b vol1right,d0
  6187.  move.w d0,$c8(a6)
  6188.  
  6189. NoChan2sound:
  6190.  
  6191. *****************************************
  6192. *****************************************
  6193.  
  6194.  btst #2,intreqr(a6)
  6195.  beq.s nofinish3
  6196.  move.l #null,$d0(a6)
  6197.  move.w #100,$d4(a6)
  6198.  move.w #$0400,intreq(a6)
  6199. nofinish3:
  6200.  
  6201.  tst.b NoiseMade1pLEFT
  6202.  beq.s NoChan3sound
  6203.  
  6204.  move.l Samp1endLEFT,d0
  6205.  move.l pos1LEFT,d1
  6206.  sub.l d1,d0
  6207.  lsr.l #1,d0
  6208.  move.w d0,$d4(a6)
  6209.  move.w d0,playnull3
  6210.  move.l d1,$d0(a6)
  6211.  move.w #$8208,dmacon(a6)
  6212.  moveq #0,d0
  6213.  move.b vol1left,d0
  6214.  move.w d0,$d8(a6)
  6215.  
  6216. NoChan3sound:
  6217.  
  6218. nomorechannels:
  6219.  
  6220.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  6221.  move.l #0,NoiseMade0LEFT
  6222.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  6223.  move.l #0,NoiseMade0RIGHT
  6224.  
  6225.  
  6226. ; tst.b playnull0
  6227. ; beq.s .nnul
  6228. ; sub.b #1,playnull0
  6229. ; bra.s chan0still
  6230. ;.nnul:
  6231. ;chan0still:
  6232.  
  6233.  tst.b NoiseMade0pRIGHT
  6234.  bne.s chan1still
  6235.  tst.w playnull1
  6236.  beq.s nnul1
  6237.  sub.w #100,playnull1
  6238.  bra.s chan1still
  6239. nnul1:
  6240.  move.w #0,RIGHTCHANDATA+2
  6241.  st RIGHTCHANDATA+1
  6242. chan1still:
  6243.  
  6244.  tst.b NoiseMade1pRIGHT
  6245.  bne.s chan2still
  6246.  tst.w playnull2
  6247.  beq.s nnul2
  6248.  sub.w #100,playnull2
  6249.  bra.s chan2still
  6250. nnul2:
  6251.  move.w #0,RIGHTCHANDATA+2+4
  6252.  st RIGHTCHANDATA+1+4
  6253. chan2still:
  6254.  
  6255.  tst.b NoiseMade1pLEFT
  6256.  bne.s chan3still
  6257.  tst.w playnull3
  6258.  beq.s nnul3
  6259.  sub.w #100,playnull3
  6260.  bra.s chan3still
  6261. nnul3:
  6262.  move.w #0,LEFTCHANDATA+2+4
  6263.  st LEFTCHANDATA+1+4
  6264.  
  6265. chan3still:
  6266.  
  6267.  
  6268.  movem.l (a7)+,d0-d7/a0-a6
  6269.  tst.b counting
  6270.  beq .nostartcounter
  6271.  JSR STARTCOUNT
  6272. .nostartcounter:
  6273.  
  6274.  rte
  6275.  
  6276. backbeat: dc.w 0
  6277.  
  6278. playnull0: dc.w 0
  6279. playnull1: dc.w 0
  6280. playnull2: dc.w 0
  6281. playnull3: dc.w 0
  6282.  
  6283. Samp0endRIGHT: dc.l emptyend
  6284. Samp1endRIGHT: dc.l emptyend
  6285. Samp2endRIGHT: dc.l emptyend
  6286. Samp3endRIGHT: dc.l emptyend
  6287. Samp0endLEFT: dc.l emptyend
  6288. Samp1endLEFT: dc.l emptyend
  6289. Samp2endLEFT: dc.l emptyend
  6290. Samp3endLEFT: dc.l emptyend
  6291.  
  6292. Aupt0: dc.l null
  6293. Auback0: dc.l null+500
  6294. Aupt2: dc.l null3
  6295. Auback2: dc.l null3+500
  6296. Aupt3: dc.l null4
  6297. Auback3: dc.l null4+500
  6298. Aupt1: dc.l null2
  6299. Auback1: dc.l null2+500
  6300.  
  6301. NoiseMade0LEFT: dc.b 0
  6302. NoiseMade1LEFT: dc.b 0
  6303. NoiseMade2LEFT: dc.b 0
  6304. NoiseMade3LEFT: dc.b 0
  6305. NoiseMade0pLEFT: dc.b 0
  6306. NoiseMade1pLEFT: dc.b 0
  6307. NoiseMade2pLEFT: dc.b 0
  6308. NoiseMade3pLEFT: dc.b 0
  6309. NoiseMade0RIGHT: dc.b 0
  6310. NoiseMade1RIGHT: dc.b 0
  6311. NoiseMade2RIGHT: dc.b 0
  6312. NoiseMade3RIGHT: dc.b 0
  6313. NoiseMade0pRIGHT: dc.b 0
  6314. NoiseMade1pRIGHT: dc.b 0
  6315. NoiseMade2pRIGHT: dc.b 0
  6316. NoiseMade3pRIGHT: dc.b 0
  6317.  
  6318. empty: ds.l 100
  6319. emptyend:
  6320.  
  6321. **************************************
  6322. * I want a routine to calculate all the
  6323. * info needed for the sound player to
  6324. * work, given say position of noise, volume
  6325. * and sample number.
  6326.  
  6327. Samplenum: dc.w 0
  6328. Noisex: dc.w 0
  6329. Noisez: dc.w 0
  6330. Noisevol: dc.w 0
  6331. chanpick: dc.w 0
  6332. IDNUM: dc.w 0
  6333. needleft: dc.b 0
  6334. needright: dc.b 0
  6335. STEREO: dc.b $0
  6336. even
  6337. prot6: dc.w 0
  6338.  
  6339.  even
  6340.  
  6341. CHANNELDATA:
  6342. LEFTCHANDATA:
  6343.  dc.l $FF000000
  6344.  dc.l $00000000
  6345.  dc.l $FF000000
  6346.  dc.l $FF000000
  6347. RIGHTCHANDATA:
  6348.  dc.l $00000000
  6349.  dc.l $00000000
  6350.  dc.l $FF000000
  6351.  dc.l $FF000000
  6352.  
  6353. RIGHTPLAYEDTAB: ds.l 20
  6354. LEFTPLAYEDTAB: ds.l 20
  6355.  
  6356. MakeSomeNoise:
  6357.  
  6358. ; Plan for new sound handler:
  6359. ; It is sent a sample number,
  6360. ; a position relative to the
  6361. ; player, an id number and a volume.
  6362. ; Also notifplaying.
  6363.  
  6364. ; indirect inputs are the available
  6365. ; channel flags and whether or not
  6366. ; stereo sound is selected.
  6367.  
  6368. ; the algorithm must decide
  6369. ; whether the new sound is more
  6370. ; important than the ones already
  6371. ; playing. Thus an 'importance'
  6372. ; must be calculated, probably
  6373. ; using volume.
  6374.  
  6375. ; The output needs to be:
  6376.  
  6377. ; Write the pointers and volumes of
  6378. ; the sound channels
  6379.  
  6380.  
  6381.  tst.b notifplaying
  6382.  beq.s dontworry
  6383.  
  6384. ; find if we are already playing
  6385.  
  6386.  move.b IDNUM,d0
  6387.  move.w #7,d1
  6388.  lea CHANNELDATA,a3
  6389. findsameasme
  6390.  tst.b (a3)
  6391.  bne.s notavail
  6392.  cmp.b 1(a3),d0
  6393.  beq SameAsMe
  6394. notavail:
  6395.  add.w #4,a3
  6396.  dbra d1,findsameasme
  6397.  bra dontworry
  6398. SameAsMe
  6399.  rts
  6400.  
  6401. dontworry:
  6402.  
  6403. ; Ok its fine for us to play a sound.
  6404. ; So calculate left/right volume.
  6405.  
  6406.  move.w Noisex,d1
  6407.  muls d1,d1
  6408.  move.w Noisez,d2
  6409.  muls d2,d2
  6410.  move.w #64,d3
  6411.  moveq #1,d0
  6412.  add.l d1,d2
  6413.  beq pastcalc
  6414.  
  6415.  move.w #31,d0
  6416. .findhigh
  6417.  btst d0,d2
  6418.  bne .foundhigh
  6419.  dbra d0,.findhigh
  6420. .foundhigh
  6421.  asr.w #1,d0
  6422.  clr.l d3
  6423.  bset d0,d3
  6424.  move.l d3,d0
  6425.  
  6426.  move.w d0,d3
  6427.  muls d3,d3    ; x*x
  6428.  sub.l d2,d3    ; x*x-a
  6429.  asr.l #1,d3    ; (x*x-a)/2
  6430.  divs d0,d3    ; (x*x-a)/2x
  6431.  sub.w d3,d0    ; second approx
  6432.  bgt .stillnot0
  6433.  move.w #1,d0
  6434. .stillnot0
  6435.  
  6436.  move.w d0,d3
  6437.  muls d3,d3
  6438.  sub.l d2,d3
  6439.  asr.l #1,d3
  6440.  divs d0,d3
  6441.  sub.w d3,d0    ; second approx
  6442.  bgt .stillnot02
  6443.  move.w #1,d0
  6444. .stillnot02
  6445.  
  6446.  move.w #64,d3
  6447.  muls Noisevol,d3
  6448.  asr.w #1,d0
  6449.  addq #1,d0
  6450.  divs d0,d3
  6451.  
  6452.  cmp.w #64,d3
  6453.  ble.s notooloud
  6454.  move.w #64,d3
  6455. notooloud:
  6456.  
  6457. pastcalc:
  6458.  
  6459.     ; d3 contains volume of noise.
  6460.     
  6461.  move.w d3,d4
  6462.  
  6463.  move.w d3,d2
  6464.  muls Noisex,d2
  6465.  add.w d0,d0
  6466.  divs d0,d2
  6467.  
  6468.  bgt.s quietleft
  6469.  add.w d2,d4
  6470.  bge.s donequiet
  6471.  move.w #0,d4
  6472.  bra.s donequiet
  6473. quietleft:
  6474.  sub.w d2,d3
  6475.  bge.s donequiet
  6476.  move.w #0,d3
  6477. donequiet:
  6478.  
  6479. ; d3=leftvol?
  6480. ; d4=rightvol?
  6481.  
  6482.  clr.w needleft
  6483.  
  6484.  cmp.b d3,d4
  6485.  bgt.s RightLouder
  6486.  
  6487. ; Left is louder; is it MUCH louder?
  6488.  
  6489.  st needleft
  6490.  move.w d3,d2
  6491.  sub.w d4,d2
  6492.  cmp.w #32,d2
  6493.  slt needright
  6494.  bra aboutsame
  6495.  
  6496. RightLouder:
  6497.  st needright
  6498.  move.w d4,d2
  6499.  sub.w d3,d2
  6500.  cmp.w #32,d2
  6501.  slt needleft
  6502.  
  6503. aboutsame:
  6504.  
  6505.  tst.b STEREO
  6506.  beq NOSTEREO
  6507.  
  6508. ; Find least important sound on left
  6509.  
  6510.  move.l #0,a2
  6511.  move.l #0,d5
  6512.  move.w #10000,d2
  6513.  move.b IDNUM,d0
  6514.  lea LEFTCHANDATA,a3
  6515.  move.w #3,d1
  6516. FindLeftChannel
  6517.  tst.b (a3)
  6518.  bne.s .notactive
  6519.  cmp.b 1(a3),d0
  6520.  beq.s FOUNDLEFT
  6521.  cmp.w 2(a3),d2
  6522.  blt.s .notactive
  6523.  move.w 2(a3),d2
  6524.  move.l a3,a2
  6525.  move.w d5,d6
  6526.  
  6527. .notactive:
  6528.  add.w #4,a3
  6529.  add.w #1,d5
  6530.  dbra d1,FindLeftChannel
  6531.  move.l a2,a3
  6532.  bra.s gopastleft
  6533. FOUNDLEFT:
  6534.  move.w d5,d6
  6535. gopastleft:
  6536.  tst.l a3
  6537.  bne.s FOUNDALEFT
  6538.  rts
  6539. FOUNDALEFT:
  6540.  
  6541. ; d6 = channel number
  6542.  move.b d0,1(a3)
  6543.  move.w d3,2(a3)
  6544.  
  6545.  move.w Samplenum,d5
  6546.  move.l #SampleList,a3
  6547.  move.l (a3,d5.w*8),a1
  6548.  move.l 4(a3,d5.w*8),a2
  6549.  
  6550.  tst.b d6
  6551.  seq NoiseMade0LEFT
  6552.  beq.s .chan0
  6553.  cmp.b #2,d6
  6554.  slt NoiseMade1LEFT
  6555.  blt .chan1
  6556.  seq NoiseMade2LEFT
  6557.  beq .chan2
  6558.  st NoiseMade3LEFT
  6559.  
  6560.  move.b d5,LEFTPLAYEDTAB+9
  6561.  move.b d3,LEFTPLAYEDTAB+1+9
  6562.  move.b d4,LEFTPLAYEDTAB+2+9
  6563.  move.b d3,vol3left
  6564.  move.l a1,pos3LEFT
  6565.  move.l a2,Samp3endLEFT
  6566.  bra dorightchan
  6567.  
  6568. .chan0: 
  6569.  move.b d5,LEFTPLAYEDTAB
  6570.  move.b d3,LEFTPLAYEDTAB+1
  6571.  move.b d4,LEFTPLAYEDTAB+2
  6572.  move.l a1,pos0LEFT
  6573.  move.l a2,Samp0endLEFT
  6574.  move.b d3,vol0left
  6575.  bra dorightchan
  6576.  
  6577. .chan1:
  6578.  move.b d5,LEFTPLAYEDTAB+3
  6579.  move.b d3,LEFTPLAYEDTAB+1+3
  6580.  move.b d4,LEFTPLAYEDTAB+2+3
  6581.  move.b d3,vol1left
  6582.  move.l a1,pos1LEFT
  6583.  move.l a2,Samp1endLEFT
  6584.  bra dorightchan
  6585.  
  6586. .chan2: 
  6587.  move.b d5,LEFTPLAYEDTAB+6
  6588.  move.b d3,LEFTPLAYEDTAB+1+6
  6589.  move.b d4,LEFTPLAYEDTAB+2+6
  6590.  move.l a1,pos2LEFT
  6591.  move.l a2,Samp2endLEFT
  6592.  move.b d3,vol2left
  6593.  
  6594. dorightchan:
  6595.  
  6596. ; Find least important sound on right
  6597.  
  6598.  move.l #0,a2
  6599.  move.l #0,d5
  6600.  move.w #10000,d2
  6601.  move.b IDNUM,d0
  6602.  lea RIGHTCHANDATA,a3
  6603.  move.w #3,d1
  6604. FindRightChannel
  6605.  tst.b (a3)
  6606.  bne.s .notactive
  6607.  cmp.b 1(a3),d0
  6608.  beq.s FOUNDRIGHT
  6609.  cmp.w 2(a3),d2
  6610.  blt.s .notactive
  6611.  move.w 2(a3),d2
  6612.  move.l a3,a2
  6613.  move.w d5,d6
  6614.  
  6615. .notactive:
  6616.  add.w #4,a3
  6617.  add.w #1,d5
  6618.  dbra d1,FindRightChannel
  6619.  move.l a2,a3
  6620.  bra.s gopastright
  6621. FOUNDRIGHT:
  6622.  move.w d5,d6
  6623. gopastright:
  6624.  tst.l a3
  6625.  bne.s FOUNDARIGHT
  6626.  rts
  6627. FOUNDARIGHT:
  6628.  
  6629. ; d6 = channel number
  6630.  move.b d0,1(a3)
  6631.  move.w d3,2(a3)
  6632.  
  6633.  move.w Samplenum,d5
  6634.  move.l #SampleList,a3
  6635.  move.l (a3,d5.w*8),a1
  6636.  move.l 4(a3,d5.w*8),a2
  6637.  
  6638.  tst.b d6
  6639.  seq NoiseMade0RIGHT
  6640.  beq.s .chan0
  6641.  cmp.b #2,d6
  6642.  slt NoiseMade1RIGHT
  6643.  blt .chan1
  6644.  seq NoiseMade2RIGHT
  6645.  beq .chan2
  6646.  st NoiseMade3RIGHT
  6647.  
  6648.  move.b d5,RIGHTPLAYEDTAB+9
  6649.  move.b d3,RIGHTPLAYEDTAB+1+9
  6650.  move.b d4,RIGHTPLAYEDTAB+2+9
  6651.  move.b d4,vol3right
  6652.  move.l a1,pos3RIGHT
  6653.  move.l a2,Samp3endRIGHT
  6654.  rts
  6655.  
  6656. .chan0: 
  6657.  move.b d5,RIGHTPLAYEDTAB
  6658.  move.b d3,RIGHTPLAYEDTAB+1
  6659.  move.b d4,RIGHTPLAYEDTAB+2
  6660.  move.l a1,pos0RIGHT
  6661.  move.l a2,Samp0endRIGHT
  6662.  move.b d4,vol0right
  6663.  rts
  6664.  
  6665. .chan1:
  6666.  move.b d5,RIGHTPLAYEDTAB+3
  6667.  move.b d3,RIGHTPLAYEDTAB+1+3
  6668.  move.b d4,RIGHTPLAYEDTAB+2+3
  6669.  move.b d3,vol1right
  6670.  move.l a1,pos1RIGHT
  6671.  move.l a2,Samp1endRIGHT
  6672.  rts
  6673.  
  6674. .chan2: 
  6675.  move.b d5,RIGHTPLAYEDTAB+6
  6676.  move.b d3,RIGHTPLAYEDTAB+1+6
  6677.  move.b d4,RIGHTPLAYEDTAB+2+6
  6678.  move.l a1,pos2RIGHT
  6679.  move.l a2,Samp2endRIGHT
  6680.  move.b d3,vol2right
  6681.  rts
  6682.  
  6683. NOSTEREO:
  6684.  move.l #0,a2
  6685.  move.l #0,d5
  6686.  move.w #10000,d2
  6687.  move.b IDNUM,d0
  6688.  lea CHANNELDATA,a3
  6689.  move.w #7,d1
  6690. FindChannel
  6691.  tst.b (a3)
  6692.  bne.s .notactive
  6693.  cmp.b 1(a3),d0
  6694.  beq.s FOUNDCHAN
  6695.  cmp.w 2(a3),d2
  6696.  blt.s .notactive
  6697.  move.w 2(a3),d2
  6698.  move.l a3,a2
  6699.  move.w d5,d6
  6700.  
  6701. .notactive:
  6702.  add.w #4,a3
  6703.  add.w #1,d5
  6704.  dbra d1,FindChannel
  6705.  move.l a2,a3
  6706.  bra.s gopastchan
  6707. FOUNDCHAN:
  6708.  move.w d5,d6
  6709. gopastchan:
  6710.  tst.l a3
  6711.  bne.s FOUNDACHAN
  6712. tooquiet:
  6713.  rts
  6714. FOUNDACHAN:
  6715.  
  6716. ; d6 = channel number
  6717.  
  6718.  cmp.w d2,d3
  6719.  blt.s tooquiet
  6720.  
  6721.  move.b d0,1(a3)
  6722.  move.w d3,2(a3)
  6723.  
  6724.  move.w Samplenum,d5
  6725.  move.l #SampleList,a3
  6726.  move.l (a3,d5.w*8),a1
  6727.  move.l 4(a3,d5.w*8),a2
  6728.  
  6729.  tst.b d6
  6730.  seq NoiseMade0LEFT
  6731.  beq .chan0
  6732.  cmp.b #2,d6
  6733.  slt NoiseMade1LEFT
  6734.  blt .chan1
  6735.  seq NoiseMade2LEFT
  6736.  beq .chan2
  6737.  cmp.b #4,d6
  6738.  slt NoiseMade3LEFT
  6739.  blt .chan3
  6740.  seq NoiseMade0RIGHT
  6741.  beq .chan4
  6742.  cmp.b #6,d6
  6743.  slt NoiseMade1RIGHT
  6744.  blt .chan5
  6745.  seq NoiseMade2RIGHT
  6746.  beq .chan6
  6747.  st NoiseMade3RIGHT
  6748.  
  6749.  move.b d5,RIGHTPLAYEDTAB+9
  6750.  move.b d3,RIGHTPLAYEDTAB+1+9
  6751.  move.b d4,RIGHTPLAYEDTAB+2+9
  6752.  move.b d4,vol3right
  6753.  move.l a1,pos3RIGHT
  6754.  move.l a2,Samp3endRIGHT
  6755.  rts
  6756.  
  6757. .chan3:
  6758.  move.b d5,LEFTPLAYEDTAB+9
  6759.  move.b d3,LEFTPLAYEDTAB+1+9
  6760.  move.b d4,LEFTPLAYEDTAB+2+9
  6761.  move.b d3,vol3left
  6762.  move.l a1,pos3LEFT
  6763.  move.l a2,Samp3endLEFT
  6764.  bra dorightchan
  6765.  
  6766. .chan0: 
  6767.  move.b d5,LEFTPLAYEDTAB
  6768.  move.b d3,LEFTPLAYEDTAB+1
  6769.  move.b d4,LEFTPLAYEDTAB+2
  6770.  move.l a1,pos0LEFT
  6771.  move.l a2,Samp0endLEFT
  6772.  move.b d3,vol0left
  6773.  rts
  6774.  
  6775. .chan1:
  6776.  move.b d5,LEFTPLAYEDTAB+3
  6777.  move.b d3,LEFTPLAYEDTAB+1+3
  6778.  move.b d4,LEFTPLAYEDTAB+2+3
  6779.  move.b d3,vol1left
  6780.  move.l a1,pos1LEFT
  6781.  move.l a2,Samp1endLEFT
  6782.  rts
  6783.  
  6784. .chan2: 
  6785.  move.b d5,LEFTPLAYEDTAB+6
  6786.  move.b d3,LEFTPLAYEDTAB+1+6
  6787.  move.b d4,LEFTPLAYEDTAB+2+6
  6788.  move.l a1,pos2LEFT
  6789.  move.l a2,Samp2endLEFT
  6790.  move.b d3,vol2left
  6791.  rts
  6792.  
  6793. .chan4: 
  6794.  move.b d5,RIGHTPLAYEDTAB
  6795.  move.b d3,RIGHTPLAYEDTAB+1
  6796.  move.b d4,RIGHTPLAYEDTAB+2
  6797.  move.l a1,pos0RIGHT
  6798.  move.l a2,Samp0endRIGHT
  6799.  move.b d4,vol0right
  6800.  rts
  6801.  
  6802. .chan5:
  6803.  move.b d5,RIGHTPLAYEDTAB+3
  6804.  move.b d3,RIGHTPLAYEDTAB+1+3
  6805.  move.b d4,RIGHTPLAYEDTAB+2+3
  6806.  move.b d3,vol1right
  6807.  move.l a1,pos1RIGHT
  6808.  move.l a2,Samp1endRIGHT
  6809.  rts
  6810.  
  6811. .chan6: 
  6812.  move.b d5,RIGHTPLAYEDTAB+6
  6813.  move.b d3,RIGHTPLAYEDTAB+1+6
  6814.  move.b d4,RIGHTPLAYEDTAB+2+6
  6815.  move.l a1,pos2RIGHT
  6816.  move.l a2,Samp2endRIGHT
  6817.  move.b d3,vol2right
  6818.  rts
  6819.  
  6820. SampleList:
  6821.  dc.l Scream,EndScream
  6822.  dc.l Shoot,EndShoot
  6823.  dc.l Munch,EndMunch
  6824.  dc.l PooGun,EndPooGun
  6825.  dc.l Collect,EndCollect
  6826. ;5
  6827.  dc.l DoorNoise,EndDoorNoise
  6828.  dc.l 0,0
  6829.  dc.l Stomp,EndStomp
  6830.  dc.l LowScream,EndLowScream
  6831.  dc.l BaddieGun,EndBaddieGun
  6832. ;10
  6833.  dc.l SwitchNoise,EndSwitch
  6834.  dc.l Reload,EndReload
  6835.  dc.l NoAmmo,EndNoAmmo
  6836.  dc.l Splotch,EndSplotch
  6837.  dc.l SplatPop,EndSplatPop
  6838. ;15
  6839.  dc.l Boom,EndBoom
  6840.  dc.l Hiss,EndHiss
  6841.  dc.l Howl1,EndHowl1
  6842.  dc.l Howl2,EndHowl2
  6843.  dc.l Pant,EndPant
  6844. ;20
  6845.  dc.l Whoosh,EndWhoosh
  6846.  dc.l ROAR,EndROAR
  6847.  
  6848.  include "ab3:source/wallchunk.s"
  6849.  
  6850. saveinters:  
  6851.  dc.w 0
  6852.  
  6853. z: dc.w 10
  6854.  
  6855. notifplaying:
  6856.  dc.w 0
  6857.  
  6858. audpos1: dc.w 0
  6859. audpos1b: dc.w 0
  6860. audpos2: dc.w 0
  6861. audpos2b: dc.w 0
  6862. audpos3: dc.w 0
  6863. audpos3b: dc.w 0
  6864. audpos4: dc.w 0
  6865. audpos4b: dc.w 0
  6866.  
  6867. vol0left: dc.w 0
  6868. vol0right: dc.w 0
  6869. vol1left: dc.w 0
  6870. vol1right: dc.w 0
  6871. vol2left: dc.w 0
  6872. vol2right: dc.w 0
  6873. vol3left: dc.w 0
  6874. vol3right: dc.w 0
  6875.  
  6876. pos: dc.l 0
  6877.  
  6878. pos0LEFT: dc.l empty
  6879. pos1LEFT: dc.l empty
  6880. pos2LEFT: dc.l empty
  6881. pos3LEFT: dc.l empty
  6882. pos0RIGHT: dc.l empty
  6883. pos1RIGHT: dc.l empty
  6884. pos2RIGHT: dc.l empty
  6885. pos3RIGHT: dc.l empty
  6886.  
  6887. numtodo dc.w 0
  6888.  
  6889. npt: dc.w 0
  6890.  
  6891. pretab:
  6892. val SET 0
  6893.  REPT 128
  6894.  dc.b val
  6895. val SET val+1
  6896.  ENDR
  6897. val SET -128
  6898.  REPT 128
  6899.  dc.b val
  6900. val SET val+1
  6901.  ENDR 
  6902.  
  6903. tab:
  6904.  ds.b 256*65
  6905.  
  6906.  
  6907. test: dc.l 0
  6908.  ds.l 30
  6909.  
  6910.  even
  6911. ConstCols:
  6912.  incbin "ConstCols"
  6913.  even
  6914. Smoothscalecols:
  6915. ; incbin "smoothbumppalscaled"
  6916.  even
  6917. SmoothTile:
  6918. ; incbin "smoothbumptile"
  6919.  even
  6920. Bumpscalecols:
  6921. ; incbin "Bumppalscaled"
  6922.  even
  6923. Bumptile:
  6924. ; incbin "bumptile"
  6925.  even
  6926. scalecols: ;incbin "bytepixpalscaled"
  6927.  even
  6928. floorscalecols: incbin "floorpalscaled"
  6929.  ds.w 256*4
  6930.  
  6931.  even
  6932. PaletteAddr: dc.l 0
  6933. ChunkAddr: dc.l 0
  6934. ;walltiles:
  6935. ; dc.l GreenMechanicWALL
  6936. ; dc.l BlueGreyMetalWALL
  6937. ; dc.l TechnoDetailWALL
  6938. ; dc.l BlueStoneWALL
  6939. ; dc.l RedAlertWALL
  6940. ; dc.l RockWALL
  6941. ;
  6942. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  6943. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  6944. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  6945. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  6946. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  6947. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  6948.  
  6949. floortile:
  6950.  incbin "floortile" 
  6951.  even
  6952. wallrouts:
  6953. ; incbin "2x2WallDraw" 
  6954.  CNOP 0,64
  6955. BackPicture:
  6956.  incbin "backfile"
  6957. EndBackPicture:
  6958.  
  6959. drawpt: dc.l colbars2
  6960. olddrawpt: dc.l colbars
  6961. frompt: dc.l 0 
  6962.  
  6963. SineTable:
  6964.  incbin "bigsine"
  6965.  
  6966. angpos: dc.w 0
  6967. angspd: dc.w 0
  6968. flooryoff: dc.w 0
  6969. xoff: dc.l 0
  6970. yoff: dc.l 0
  6971. yvel: dc.l 0
  6972. zoff: dc.l 0
  6973. tyoff: dc.l 0
  6974. xspdval: dc.l 0
  6975. zspdval: dc.l 0
  6976. Zone: dc.w 0
  6977.  
  6978. PLR1: dc.b $ff
  6979.  even
  6980. PLR1_energy: dc.w 191
  6981. PLR1_GunSelected: dc.w 0
  6982. PLR1_cosval: dc.w 0
  6983. PLR1_sinval: dc.w 0
  6984. PLR1_angpos: dc.w 0
  6985. PLR1_angspd: dc.w 0
  6986. PLR1_xoff: dc.l 0
  6987. PLR1_yoff: dc.l 0
  6988. PLR1_yvel: dc.l 0
  6989. PLR1_zoff: dc.l 0
  6990. PLR1_tyoff: dc.l 0
  6991. PLR1_xspdval: dc.l 0
  6992. PLR1_zspdval: dc.l 0
  6993. PLR1_Zone: dc.w 0
  6994. PLR1_Roompt: dc.l 0
  6995. PLR1_OldRoompt: dc.l 0
  6996. PLR1_PointsToRotatePtr: dc.l 0
  6997. PLR1_ListOfGraphRooms: dc.l 0
  6998. PLR1_oldxoff: dc.l 0
  6999. PLR1_oldzoff: dc.l 0
  7000. PLR1_StoodInTop: dc.b 0
  7001.  even
  7002. PLR1_height: dc.l 0
  7003.  
  7004.  ds.w 4
  7005.  
  7006. PLR1s_cosval: dc.w 0
  7007. PLR1s_sinval: dc.w 0
  7008. PLR1s_angpos: dc.w 0
  7009. PLR1s_angspd: dc.w 0
  7010. PLR1s_xoff: dc.l 0
  7011. PLR1s_yoff: dc.l 0
  7012. PLR1s_yvel: dc.l 0
  7013. PLR1s_zoff: dc.l 0
  7014. PLR1s_tyoff: dc.l 0
  7015. PLR1s_xspdval: dc.l 0
  7016. PLR1s_zspdval: dc.l 0
  7017. PLR1s_Zone: dc.w 0
  7018. PLR1s_Roompt: dc.l 0
  7019. PLR1s_OldRoompt: dc.l 0
  7020. PLR1s_PointsToRotatePtr: dc.l 0
  7021. PLR1s_ListOfGraphRooms: dc.l 0
  7022. PLR1s_oldxoff: dc.l 0
  7023. PLR1s_oldzoff: dc.l 0
  7024. PLR1s_height: dc.l 0
  7025. PLR1s_targheight: dc.l 0
  7026.  
  7027. p1_xoff: dc.l 0
  7028. p1_zoff: dc.l 0
  7029. p1_yoff: dc.l 0
  7030. p1_height: dc.l 0
  7031. p1_angpos: dc.w 0
  7032. p1_bobble: dc.w 0
  7033. p1_clicked: dc.b 0
  7034. p1_spctap: dc.b 0
  7035. p1_ducked: dc.b 0
  7036. p1_gunselected: dc.b 0
  7037. p1_fire: dc.b 0
  7038.  
  7039.  ds.w 4
  7040.  
  7041. PLR2: dc.b $ff
  7042.  even
  7043. PLR2_GunSelected: dc.w 0
  7044. PLR2_energy: dc.w 191
  7045. PLR2_cosval: dc.w 0
  7046. PLR2_sinval: dc.w 0
  7047. PLR2_angpos: dc.w 0
  7048. PLR2_angspd: dc.w 0
  7049. PLR2_xoff: dc.l 0
  7050. PLR2_yoff: dc.l 0
  7051. PLR2_yvel: dc.l 0
  7052. PLR2_zoff: dc.l 0
  7053. PLR2_tyoff: dc.l 0
  7054. PLR2_xspdval: dc.l 0
  7055. PLR2_zspdval: dc.l 0
  7056. PLR2_Zone: dc.w 0
  7057. PLR2_Roompt: dc.l 0
  7058. PLR2_OldRoompt: dc.l 0
  7059. PLR2_PointsToRotatePtr: dc.l 0
  7060. PLR2_ListOfGraphRooms: dc.l 0
  7061. PLR2_oldxoff: dc.l 0
  7062. PLR2_oldzoff: dc.l 0
  7063. PLR2_StoodInTop: dc.b 0
  7064.  even
  7065. PLR2_height: dc.l 0
  7066.  
  7067.  ds.w 4
  7068.  
  7069. PLR2s_cosval: dc.w 0
  7070. PLR2s_sinval: dc.w 0
  7071. PLR2s_angpos: dc.w 0
  7072. PLR2s_angspd: dc.w 0
  7073. PLR2s_xoff: dc.l 0
  7074. PLR2s_yoff: dc.l 0
  7075. PLR2s_yvel: dc.l 0
  7076. PLR2s_zoff: dc.l 0
  7077. PLR2s_tyoff: dc.l 0
  7078. PLR2s_xspdval: dc.l 0
  7079. PLR2s_zspdval: dc.l 0
  7080. PLR2s_Zone: dc.w 0
  7081. PLR2s_Roompt: dc.l 0
  7082. PLR2s_OldRoompt: dc.l 0
  7083. PLR2s_PointsToRotatePtr: dc.l 0
  7084. PLR2s_ListOfGraphRooms: dc.l 0
  7085. PLR2s_oldxoff: dc.l 0
  7086. PLR2s_oldzoff: dc.l 0
  7087. PLR2s_height: dc.l 0
  7088. PLR2s_targheight: dc.l 0
  7089.  
  7090.  ds.w 4
  7091.  
  7092. p2_xoff: dc.l 0
  7093. p2_zoff: dc.l 0
  7094. p2_yoff: dc.l 0
  7095. p2_height: dc.l 0
  7096. p2_angpos: dc.w 0
  7097. p2_bobble: dc.w 0
  7098. p2_clicked: dc.b 0
  7099. p2_spctap: dc.b 0
  7100. p2_ducked: dc.b 0
  7101. p2_gunselected: dc.b 0
  7102. p2_fire: dc.b 0
  7103.  
  7104.  
  7105. liftanimtab:
  7106.  
  7107.  
  7108. endliftanimtab:
  7109.  
  7110. glassball:
  7111.  incbin "glassball.inc"
  7112. endglass
  7113. glassballpt: dc.l glassball
  7114.  
  7115. rndtab: ; incbin "randfile"
  7116. endrnd: 
  7117.  
  7118. brightanimtab:
  7119.  dcb.w 200,20
  7120.  dc.w 5
  7121.  dc.w 10,20
  7122.  dc.w 5
  7123.  dcb.w 30,20
  7124.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  7125.  dcb.w 40,0
  7126.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  7127.  dcb.w 300,0
  7128.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  7129.  dc.w -1
  7130.  
  7131. Roompt: dc.l 0
  7132. OldRoompt: dc.l 0
  7133.  
  7134. *****************************************************************
  7135.  *
  7136.  include "AB3:source/LevelData2"
  7137.  *
  7138. *****************************************************************
  7139.  
  7140.  
  7141. wallpt: dc.l 0
  7142. floorpt: dc.l 0
  7143.  
  7144. Rotated:
  7145.  ds.l 800 
  7146. ObjRotated:
  7147.  ds.l 800
  7148.  
  7149. OnScreen:
  7150.  ds.l 800 
  7151.  
  7152. startwait: dc.w 0
  7153. endwait: dc.w 0
  7154.  
  7155. Faces: incbin "faces2raw"
  7156.  
  7157. *******************************************************************
  7158.  
  7159. consttab:
  7160.  incbin "constantfile"
  7161.  
  7162. *******************************************************************
  7163.  
  7164. darkentab: incbin "darkenedcols"
  7165. brightentab: incbin "brightenfile"
  7166. WorkSpace:
  7167.  ds.l 8192 
  7168. waterfile: incbin "waterfile"
  7169.  
  7170.  SECTION ffff,CODE_C
  7171.  
  7172. nullspr: dc.l 0
  7173.  
  7174.  cnop 0,8
  7175. borders:
  7176.  incbin "leftbord"
  7177.  incbin "rightbord"
  7178.  
  7179. health: incbin "healthstrip"
  7180. Ammunition: incbin "ammostrip"
  7181. healthpal: incbin "healthpal"
  7182. PanelKeys: incbin "greenkey"
  7183.  incbin "redkey"
  7184.  incbin "yellowkey"
  7185.  incbin "bluekey"
  7186.  
  7187. null: ds.w 500
  7188. null2: ds.w 500
  7189. null3: ds.w 500
  7190. null4: ds.w 500
  7191.  
  7192.  
  7193. Blurbfield:
  7194.  
  7195.  dc.w bpl1ptl
  7196. bl1l: dc.w 0
  7197.  dc.w bpl1pth
  7198. bl1h: dc.w 0
  7199.  
  7200.  dc.w diwstart,$2c81
  7201.  dc.w diwstop,$1cc1
  7202.  dc.w ddfstart,$38
  7203.  dc.w ddfstop,$b8
  7204.  dc.w bplcon0,$9201
  7205.  dc.w bplcon1,0
  7206.  dc.w $106,$c40
  7207. blcols:
  7208.  dc.w col0,0
  7209.  dc.w col1,$fff
  7210.  
  7211.  dc.w $108,0
  7212.  dc.w $10a,0
  7213.  
  7214.  dc.w $ffff,$fffe
  7215.  dc.w $ffff,$fffe
  7216.  
  7217. nullline:
  7218.  ds.b 80    
  7219.  
  7220. bigfield:    
  7221.                 ; Start of our copper list.
  7222.  
  7223.  dc.w dmacon,$8020
  7224.  dc.w intreq,$8011
  7225.  dc.w $1fc,$f
  7226.  dc.w diwstart
  7227. winstart: dc.w $2cb1
  7228.  dc.w diwstop
  7229. winstop: dc.w $2c91
  7230.  dc.w ddfstart
  7231. fetchstart: dc.w $48
  7232.  dc.w ddfstop
  7233. fetchstop: dc.w $88
  7234.  
  7235. bordercols:
  7236.  incbin "borderpal"
  7237.  
  7238.  dc.w spr0ptl
  7239. s0l:
  7240.  dc.w 0
  7241.  dc.w spr0pth
  7242. s0h:
  7243.  dc.w 0
  7244.  dc.w spr1ptl
  7245. s1l:
  7246.  dc.w 0
  7247.  dc.w spr1pth
  7248. s1h:
  7249.  dc.w 0
  7250.  dc.w spr2ptl
  7251. s2l:
  7252.  dc.w 0
  7253.  dc.w spr2pth
  7254. s2h:
  7255.  dc.w 0
  7256.  dc.w spr3ptl
  7257. s3l:
  7258.  dc.w 0
  7259.  dc.w spr3pth
  7260. s3h:
  7261.  dc.w 0
  7262.  dc.w spr4ptl
  7263. s4l:
  7264.  dc.w 0
  7265.  dc.w spr4pth
  7266. s4h:
  7267.  dc.w 0
  7268.  dc.w spr5ptl
  7269. s5l:
  7270.  dc.w 0
  7271.  dc.w spr5pth
  7272. s5h:
  7273.  dc.w 0
  7274.  dc.w spr6ptl
  7275. s6l:
  7276.  dc.w 0
  7277.  dc.w spr6pth
  7278. s6h:
  7279.  dc.w 0
  7280.  dc.w spr7ptl
  7281. s7l:
  7282.  dc.w 0
  7283.  dc.w spr7pth
  7284. s7h:
  7285.  dc.w 0
  7286.  
  7287.  
  7288.  dc.w $106,$c42
  7289.  incbin "borderpal"
  7290.  
  7291.  dc.w $106,$8c42
  7292.  dc.w col0
  7293. hitcol: dc.w $0
  7294.  dc.w $106,$c42
  7295.  dc.w col0
  7296. hitcol2: dc.w 0
  7297.  
  7298.  dc.w bplcon0,$7201
  7299.  dc.w bplcon1
  7300. smoff:
  7301.  dc.w $0
  7302.  
  7303.  dc.w $108
  7304. modulo: dc.w -24
  7305.  dc.w $10a,-24
  7306.  
  7307.  dc.w bpl1pth
  7308. pl1h
  7309.  dc.w 0
  7310.  
  7311.  dc.w bpl1ptl
  7312. pl1l
  7313.  dc.w 0
  7314.  
  7315.  dc.w bpl2pth
  7316. pl2h
  7317.  dc.w 0
  7318.  
  7319.  dc.w bpl2ptl
  7320. pl2l
  7321.  dc.w 0
  7322.  
  7323.  dc.w bpl3pth
  7324. pl3h
  7325.  dc.w 0
  7326.  
  7327.  dc.w bpl3ptl
  7328. pl3l
  7329.  dc.w 0
  7330.  
  7331.  dc.w bpl4pth
  7332. pl4h
  7333.  dc.w 0
  7334.  
  7335.  dc.w bpl4ptl
  7336. pl4l
  7337.  dc.w 0
  7338.  
  7339.  dc.w bpl5pth
  7340. pl5h
  7341.  dc.w 0
  7342.  
  7343.  dc.w bpl5ptl
  7344. pl5l
  7345.  dc.w 0
  7346.  
  7347.  dc.w bpl6pth
  7348. pl6h
  7349.  dc.w 0
  7350.  
  7351.  dc.w bpl6ptl
  7352. pl6l
  7353.  dc.w 0
  7354.  
  7355.  dc.w bpl7pth
  7356. pl7h
  7357.  dc.w 0
  7358.  
  7359.  dc.w bpl7ptl
  7360. pl7l
  7361.  dc.w 0
  7362.  
  7363.  
  7364.  dc.w $1001,$ff00
  7365.  dc.w intreq,$11
  7366. yposcop:
  7367.  dc.w $2a11,$fffe
  7368.  dc.w $8a,0
  7369.  
  7370.  ds.l 104*12
  7371.  
  7372. colbars:
  7373. val SET $2a
  7374.  dcb.l 104*80,$1fe0000
  7375.  dc.w $106,$c42
  7376.  
  7377.  dc.w $80
  7378. pch1:
  7379.  dc.w 0
  7380.  dc.w $82
  7381. pcl1:
  7382.  dc.w 0 
  7383.  dc.w $88,0
  7384.  
  7385.  dc.w $ffff,$fffe       ; End copper list.
  7386.  
  7387.  ds.l 104*12
  7388.  
  7389. colbars2:
  7390. val SET $2a
  7391.  dcb.l 104*80,$1fe0000
  7392.  
  7393.  dc.w $106,$c42
  7394.  
  7395.  dc.w $80
  7396. pch2:
  7397.  dc.w 0
  7398.  dc.w $82
  7399. pcl2:
  7400.  dc.w 0
  7401.  
  7402.  dc.w $88,0
  7403.  
  7404.  dc.w $ffff,$fffe       ; End copper list.
  7405.  
  7406.  ds.l 104*10
  7407.  
  7408. old: dc.l 0
  7409.  
  7410. prot5: dc.w 0
  7411. PanelCop:
  7412.  
  7413.  dc.w $10c,0
  7414.  dc.w bplcon0,$1201
  7415.  dc.w bpl1ptl
  7416. n1l:
  7417.  dc.w 0
  7418.  dc.w bpl1pth
  7419. n1h:
  7420.  dc.w 0
  7421.  dc.w $108,-24
  7422.  incbin "Panelpal"
  7423.  
  7424.  dc.w bpl2pth
  7425. p2h
  7426.  dc.w 0
  7427.  
  7428.  dc.w bpl2ptl
  7429. p2l
  7430.  dc.w 0
  7431.  
  7432.  dc.w bpl3pth
  7433. p3h
  7434.  dc.w 0
  7435.  
  7436.  dc.w bpl3ptl
  7437. p3l
  7438.  dc.w 0
  7439.  
  7440.  dc.w bpl4pth
  7441. p4h
  7442.  dc.w 0
  7443.  dc.w bpl4ptl
  7444. p4l
  7445.  dc.w 0
  7446.  dc.w bpl5pth
  7447. p5h
  7448.  dc.w 0
  7449.  dc.w bpl5ptl
  7450. p5l
  7451.  dc.w 0
  7452.  dc.w bpl6pth
  7453. p6h
  7454.  dc.w 0
  7455.  dc.w bpl6ptl
  7456. p6l
  7457.  dc.w 0
  7458.  dc.w bpl7pth
  7459. p7h
  7460.  dc.w 0
  7461.  dc.w bpl7ptl
  7462. p7l
  7463.  dc.w 0
  7464.  dc.w bpl8pth
  7465. p8h
  7466.  dc.w 0
  7467.  dc.w bpl8ptl
  7468. p8l
  7469.  dc.w 0
  7470.  
  7471.  dc.w $80
  7472. och:
  7473.  dc.w 0
  7474.  dc.w $82
  7475. ocl:
  7476.  dc.w 0
  7477.  
  7478.  dc.w ddfstart,$38
  7479.  dc.w ddfstop,$b8
  7480.  dc.w diwstart,$2c81
  7481.  dc.w diwstop,$2cc1
  7482.  
  7483.  dc.w bplcon0
  7484. Panelcon: dc.w $0211
  7485.  dc.w bpl1pth
  7486. p1h
  7487.  dc.w 0
  7488.  
  7489.  dc.w bpl1ptl
  7490. p1l
  7491.  dc.w 0
  7492.  
  7493.  
  7494.  dc.w $108,40*7
  7495.  dc.w $10a,40*7
  7496.  
  7497.  dc.w $ffff,$fffe
  7498.  
  7499.  dc.w $180,$fff
  7500.  
  7501.  
  7502.  dc.w $f801,$ff00
  7503.  dc.w col1,$50
  7504.  dc.w $f901,$ff00
  7505.  dc.w col1,$90
  7506.  dc.w $fa01,$ff00
  7507.  dc.w col1,$f0
  7508.  dc.w $fb01,$ff00
  7509.  dc.w col1,$f0
  7510.  dc.w $fc01,$ff00
  7511.  dc.w col1,$90
  7512.  dc.w $fd01,$ff00
  7513.  dc.w col1,$50
  7514.  
  7515.  dc.w $fe01,$ff00
  7516.  dc.w col1,$fff
  7517.  
  7518.  dc.w $ffdf,$fffe
  7519.  dc.w $a01,$ff00
  7520.  dc.w bplcon0,$201
  7521.  
  7522.  incbin "faces2cols"
  7523.  dc.w bpl1pth
  7524. f1h
  7525.  dc.w 0
  7526.  
  7527.  dc.w bpl1ptl
  7528. f1l
  7529.  dc.w 0
  7530.  
  7531.  dc.w bpl2pth
  7532. f2h
  7533.  dc.w 0
  7534.  
  7535.  dc.w bpl2ptl
  7536. f2l
  7537.  dc.w 0
  7538.  
  7539.  dc.w bpl3pth
  7540. f3h
  7541.  dc.w 0
  7542.  
  7543.  dc.w bpl3ptl
  7544. f3l
  7545.  dc.w 0
  7546.  
  7547.  dc.w bpl4pth
  7548. f4h
  7549.  dc.w 0
  7550.  dc.w bpl4ptl
  7551. f4l
  7552.  dc.w 0
  7553.  
  7554.  dc.w bpl5pth
  7555. f5h
  7556.  dc.w 0
  7557.  dc.w bpl5ptl
  7558. f5l
  7559.  dc.w 0
  7560.  
  7561.  dc.w $0c01,$ff00
  7562.  dc.w bplcon0,$5201
  7563.   
  7564.  dc.w $ffff,$fffe
  7565.  
  7566.  cnop 0,64
  7567. FacePlace:
  7568.  ds.l 6*32*5
  7569.  
  7570.  
  7571.  
  7572. ********************************************
  7573. * Stuff you don't have to worry about yet. *
  7574. ********************************************
  7575.  
  7576. closeeverything:
  7577.  
  7578.  
  7579.  jsr mt_end
  7580.  
  7581.  move.l #$dff000,a6
  7582.  move.l old,$dff080     ; Restore old copper list.
  7583.  move.l old,d0
  7584.  move.w d0,ocl
  7585.  swap d0
  7586.  move.w d0,och
  7587.  move.w #$8020,dmacon(a6)
  7588.  move.w #$f,dmacon(a6)
  7589.  move.l saveit,$6c.w
  7590.  move.l OLDKINT,$68.w
  7591.  move.w saveinters,d0
  7592.  or.w #$c000,d0
  7593.  move.w d0,intena(a6)
  7594.  clr.w $dff0a8
  7595.  clr.w $dff0b8
  7596.  clr.w $dff0c8
  7597.  clr.w $dff0d8
  7598.  
  7599. ; move.w #3,d0
  7600. ;nonewvbl
  7601. ; btst #5,intreqrl(a6)
  7602. ; beq.s nonewvbl
  7603. ; move.w #$20,intreq(a6)
  7604. ; dbra d0,nonewvbl
  7605.  
  7606. ; move.l oldview,a1
  7607. ; move.l a1,d0
  7608. ; move.l gfxbase,a6
  7609. ; jsr -$de(a6)
  7610.  
  7611.  
  7612.  cmp.b #'s',mors
  7613.  beq.s leaveold
  7614.  move.w #$f8e,$dff1dc
  7615. leaveold:
  7616.  
  7617.  jsr RELEASEWALLMEM
  7618.  
  7619.  move.l #0,d0
  7620.  
  7621.  rte
  7622.  
  7623. intbase: dc.l 0
  7624. gfxbase: dc.l 0
  7625. oldview: dc.l 0
  7626.  
  7627. stuff:
  7628.  
  7629.     Lea    gfxname(pc),a1    
  7630.     Moveq.l    #0,d0
  7631.     Move.l    $4.w,a6    
  7632.     Jsr    -$228(a6)
  7633.     Move.l     d0,gfxbase
  7634.     Move.l    d0,a6                Use As Base Reg
  7635.     Move.l    34(a6),oldview
  7636.     move.l 38(a6),old
  7637.  
  7638.  jmp endstuff
  7639.  
  7640. gfxname dc.b "graphics.library",0
  7641.  even
  7642. INTUNAME    dc.b    "intuition.library",0
  7643.  
  7644.  even
  7645.  
  7646.  
  7647.  cnop 0,64
  7648.  
  7649. Panel:
  7650.  incbin "PanelRaw"
  7651.  
  7652. TimerScr: ds.b 40*64
  7653.  
  7654. scrntab:
  7655.  ds.b 16
  7656. val SET 32
  7657.  REPT 96
  7658.  dc.b val,val,val
  7659. val SET val+1
  7660.  ENDR
  7661.  ds.b 16
  7662.  
  7663.  cnop 0,64
  7664. scrn:
  7665.  
  7666.  dcb.l 8,$33333333
  7667.  dc.l 0
  7668.  dc.l 0
  7669.  
  7670.  dcb.l 8,$0f0f0f0f
  7671.  dc.l 0
  7672.  dc.l 0
  7673.  
  7674.  dcb.l 8,$00ff00ff
  7675.  dc.l 0
  7676.  dc.l 0
  7677.  
  7678.  dcb.l 8,$0000ffff
  7679.  dc.l 0
  7680.  dc.l 0
  7681.  
  7682.  dc.l 0,-1,0,-1,0,-1,0,-1
  7683.  dc.l 0
  7684.  dc.l 0
  7685.  
  7686.  dc.l -1,-1,0,0,-1,-1,0,0
  7687.  dc.l 0
  7688.  dc.l 0
  7689.  
  7690.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  7691.  dc.l 0
  7692.  dc.l 0
  7693.  
  7694. NumTimes: dc.l 0
  7695. TimeCount: dc.l 0
  7696. oldtime: dc.l 0
  7697. counting: dc.b 0
  7698. oktodisplay: dc.b 0
  7699.  
  7700. INITTIMER:
  7701.  move.l #0,TimeCount
  7702.  move.l #0,NumTimes
  7703.  rts
  7704.  
  7705. STARTCOUNT:
  7706.  move.l d0,-(a7)
  7707.  move.l $dff004,d0
  7708.  and.l #$1ffff,d0
  7709.  move.l d0,oldtime
  7710.  st counting
  7711.  move.l (a7)+,d0
  7712.  rts
  7713.  
  7714. STOPCOUNT:
  7715.  move.l d0,-(a7)
  7716.  move.l $dff004,d0
  7717.  and.l #$1ffff,d0
  7718.  
  7719.  sub.l oldtime,d0
  7720.  cmp.l #-256,d0
  7721.  bge.s okcount
  7722.  add.l #313*256,d0
  7723. okcount:
  7724.  add.l d0,TimeCount
  7725.  addq.l #1,NumTimes
  7726.  clr.b counting
  7727.  move.l (a7)+,d0
  7728.  rts
  7729.  
  7730. STOPCOUNTNOADD:
  7731.  move.l d0,-(a7)
  7732.  move.l $dff004,d0
  7733.  and.l #$1ffff,d0
  7734.  
  7735.  sub.l oldtime,d0
  7736.  cmp.l #-256,d0
  7737.  bge.s okcount2
  7738.  add.l #313*256,d0
  7739. okcount2:
  7740.  add.l d0,TimeCount
  7741.  clr.b counting
  7742.  move.l (a7)+,d0
  7743.  rts
  7744.  
  7745. maxbot: dc.w 0
  7746. tstneg: dc.l 0
  7747.  
  7748. STOPTIMER:
  7749.  st oktodisplay
  7750.  rts
  7751.  
  7752. digits: incbin "numbers.inc"
  7753.  
  7754.  
  7755.  Section Sounds,CODE_C
  7756.  
  7757. Scream: incbin "ab3:sounds/Scream"
  7758.  ds.w 100
  7759. EndScream:
  7760. LowScream: incbin "ab3:sounds/LowScream"
  7761.  ds.w 100
  7762. EndLowScream:
  7763. BaddieGun: incbin "ab3:sounds/BaddieGun"
  7764. EndBaddieGun:
  7765. bass: incbin "ab3:sounds/backbass+drum"
  7766. bassend:
  7767. Shoot: incbin "ab3:sounds/fire!"
  7768. EndShoot:
  7769. Munch: incbin "ab3:sounds/munch"
  7770. EndMunch:
  7771. PooGun: incbin "ab3:sounds/shoot.dm"
  7772. EndPooGun:
  7773. Collect: incbin "ab3:sounds/collect"
  7774. EndCollect:
  7775. DoorNoise: incbin "ab3:sounds/newdoor"
  7776. EndDoorNoise:
  7777. Stomp: incbin "ab3:sounds/footstep3"
  7778. EndStomp:
  7779. SwitchNoise: incbin "ab3:sounds/switch"
  7780. EndSwitch:
  7781. Reload: incbin "ab3:sounds/switch1.SFX"
  7782. EndReload:
  7783. NoAmmo: incbin "ab3:sounds/noammo"
  7784. EndNoAmmo:
  7785. Splotch: incbin "ab3:sounds/splotch"
  7786. EndSplotch:
  7787. SplatPop: incbin "ab3:sounds/splatpop"
  7788. EndSplatPop:
  7789. Boom: incbin "ab3:sounds/boom"
  7790. EndBoom:
  7791. Hiss: incbin "ab3:sounds/newhiss"
  7792. EndHiss:
  7793. Howl1: incbin "ab3:sounds/howl1"
  7794. EndHowl1:
  7795. Howl2: incbin "ab3:sounds/howl2"
  7796. EndHowl2:
  7797. Pant: incbin "ab3:sounds/pant"
  7798. EndPant:
  7799. Whoosh: incbin "ab3:sounds/whoosh"
  7800. EndWhoosh:
  7801. ROAR: incbin "ab3:sounds/bigscream"
  7802. EndROAR
  7803.  SECTION music,code_c
  7804.  
  7805. UseAllChannels: dc.w 0
  7806.  
  7807. mt_init:move.l    mt_data,a0
  7808.     move.l    a0,a1
  7809.     add.l    #$3b8,a1
  7810.     moveq    #$7f,d0
  7811.     moveq    #0,d1
  7812. mt_loop:move.l    d1,d2
  7813.     subq.w    #1,d0
  7814. mt_lop2:move.b    (a1)+,d1
  7815.     cmp.b    d2,d1
  7816.     bgt.s    mt_loop
  7817.     dbf    d0,mt_lop2
  7818.     addq.b    #1,d2
  7819.  
  7820.     lea    mt_samplestarts(pc),a1
  7821.     asl.l    #8,d2
  7822.     asl.l    #2,d2
  7823.     add.l    #$43c,d2
  7824.     add.l    a0,d2
  7825.     move.l    d2,a2
  7826.     moveq    #$1e,d0
  7827. mt_lop3:clr.l    (a2)
  7828.     move.l    a2,(a1)+
  7829.     moveq    #0,d1
  7830.     move.w    42(a0),d1
  7831.     asl.l    #1,d1
  7832.     add.l    d1,a2
  7833.     add.l    #$1e,a0
  7834.     dbf    d0,mt_lop3
  7835.  
  7836.     or.b    #$2,$bfe001
  7837.     move.b    #$6,mt_speed
  7838.     clr.w    $dff0a8
  7839.     clr.w    $dff0b8
  7840.     clr.w    $dff0c8
  7841.     clr.w    $dff0d8
  7842.     clr.b    mt_songpos
  7843.     clr.b    mt_counter
  7844.     clr.w    mt_pattpos
  7845.     rts
  7846.  
  7847. mt_end:    clr.w    $dff0a8
  7848.     clr.w    $dff0b8
  7849.     clr.w    $dff0c8
  7850.     clr.w    $dff0d8
  7851.     move.w    #$f,$dff096
  7852.     rts
  7853.  
  7854. mt_music:
  7855.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  7856.     move.l    mt_data,a0
  7857.     addq.b    #$1,mt_counter
  7858.     move.b    mt_counter,D0
  7859.     cmp.b    mt_speed,D0
  7860.     blt.s    mt_nonew
  7861.     clr.b    mt_counter
  7862.     bra    mt_getnew
  7863.  
  7864. mt_nonew:
  7865.     lea    mt_voice1(pc),a6
  7866.     lea    $dff0a0,a5
  7867.     bsr    mt_checkcom
  7868.     lea    mt_voice2(pc),a6
  7869.     lea    $dff0b0,a5
  7870.     bsr    mt_checkcom
  7871.     tst.b UseAllChannels
  7872.     beq mt_endr
  7873.      lea    mt_voice3(pc),a6
  7874.     lea    $dff0c0,a5
  7875.     bsr    mt_checkcom
  7876.     lea    mt_voice4(pc),a6
  7877.     lea    $dff0d0,a5
  7878.     bsr    mt_checkcom
  7879.     bra    mt_endr
  7880.  
  7881. mt_arpeggio:
  7882.     moveq    #0,d0
  7883.     move.b    mt_counter,d0
  7884.     divs    #$3,d0
  7885.     swap    d0
  7886.     cmp.w    #$0,d0
  7887.     beq.s    mt_arp2
  7888.     cmp.w    #$2,d0
  7889.     beq.s    mt_arp1
  7890.  
  7891.     moveq    #0,d0
  7892.     move.b    $3(a6),d0
  7893.     lsr.b    #4,d0
  7894.     bra.s    mt_arp3
  7895. mt_arp1:moveq    #0,d0
  7896.     move.b    $3(a6),d0
  7897.     and.b    #$f,d0
  7898.     bra.s    mt_arp3
  7899. mt_arp2:move.w    $10(a6),d2
  7900.     bra.s    mt_arp4
  7901. mt_arp3:asl.w    #1,d0
  7902.     moveq    #0,d1
  7903.     move.w    $10(a6),d1
  7904.     lea    mt_periods(pc),a0
  7905.     moveq    #$24,d7
  7906. mt_arploop:
  7907.     move.w    (a0,d0.w),d2
  7908.     cmp.w    (a0),d1
  7909.     bge.s    mt_arp4
  7910.     addq.l    #2,a0
  7911.     dbf    d7,mt_arploop
  7912.     rts
  7913. mt_arp4:move.w    d2,$6(a5)
  7914.     rts
  7915.  
  7916. mt_getnew:
  7917.     move.l    mt_data,a0
  7918.     move.l    a0,a3
  7919.     move.l    a0,a2
  7920.     add.l    #$c,a3
  7921.     add.l    #$3b8,a2
  7922.     add.l    #$43c,a0
  7923.  
  7924.     moveq    #0,d0
  7925.     move.l    d0,d1
  7926.     move.b    mt_songpos,d0
  7927.     move.b    (a2,d0.w),d1
  7928.     asl.l    #8,d1
  7929.     asl.l    #2,d1
  7930.     add.w    mt_pattpos,d1
  7931.     clr.w    mt_dmacon
  7932.  
  7933.     lea    $dff0a0,a5
  7934.     lea    mt_voice1(pc),a6
  7935.     bsr.s    mt_playvoice
  7936.     lea    $dff0b0,a5
  7937.     lea    mt_voice2(pc),a6
  7938.     bsr.s    mt_playvoice
  7939.     tst.b UseAllChannels
  7940.     beq mt_setdma
  7941.     lea    $dff0c0,a5
  7942.     lea    mt_voice3(pc),a6
  7943.     bsr.s    mt_playvoice
  7944.     lea    $dff0d0,a5
  7945.     lea    mt_voice4(pc),a6
  7946.     bsr.s    mt_playvoice
  7947.     bra    mt_setdma
  7948.  
  7949. mt_playvoice:
  7950.     move.l    (a0,d1.l),(a6)
  7951.     addq.l    #4,d1
  7952.     moveq    #0,d2
  7953.     move.b    $2(a6),d2
  7954.     and.b    #$f0,d2
  7955.     lsr.b    #4,d2
  7956.     move.b    (a6),d0
  7957.     and.b    #$f0,d0
  7958.     or.b    d0,d2
  7959.     tst.b    d2
  7960.     beq.s    mt_setregs
  7961.     moveq    #0,d3
  7962.     lea    mt_samplestarts(pc),a1
  7963.     move.l    d2,d4
  7964.     subq.l    #$1,d2
  7965.     asl.l    #2,d2
  7966.     mulu    #$1e,d4
  7967.     move.l    (a1,d2.l),$4(a6)
  7968.     move.w    (a3,d4.l),$8(a6)
  7969.     move.w    $2(a3,d4.l),$12(a6)
  7970.     move.w    $4(a3,d4.l),d3
  7971.     tst.w    d3
  7972.     beq.s    mt_noloop
  7973.     move.l    $4(a6),d2
  7974.     asl.w    #1,d3
  7975.     add.l    d3,d2
  7976.     move.l    d2,$a(a6)
  7977.     move.w    $4(a3,d4.l),d0
  7978.     add.w    $6(a3,d4.l),d0
  7979.     move.w    d0,8(a6)
  7980.     move.w    $6(a3,d4.l),$e(a6)
  7981.     move.w    $12(a6),d0
  7982.     asr.w #2,d0
  7983.     move.w d0,$8(a5)
  7984.     bra.s    mt_setregs
  7985. mt_noloop:
  7986.     move.l    $4(a6),d2
  7987.     add.l    d3,d2
  7988.     move.l    d2,$a(a6)
  7989.     move.w    $6(a3,d4.l),$e(a6)
  7990.     move.w    $12(a6),d0
  7991.     asr.w #2,d0
  7992.     move.w d0,$8(a5)
  7993. mt_setregs:
  7994.     move.w    (a6),d0
  7995.     and.w    #$fff,d0
  7996.     beq    mt_checkcom2
  7997.     move.b    $2(a6),d0
  7998.     and.b    #$F,d0
  7999.     cmp.b    #$3,d0
  8000.     bne.s    mt_setperiod
  8001.     bsr    mt_setmyport
  8002.     bra    mt_checkcom2
  8003. mt_setperiod:
  8004.     move.w    (a6),$10(a6)
  8005.     and.w    #$fff,$10(a6)
  8006.     move.w    $14(a6),d0
  8007.     move.w    d0,$dff096
  8008.     clr.b    $1b(a6)
  8009.  
  8010.     move.l    $4(a6),(a5)
  8011.     move.w    $8(a6),$4(a5)
  8012.     move.w    $10(a6),d0
  8013.     and.w    #$fff,d0
  8014.     move.w    d0,$6(a5)
  8015.     move.w    $14(a6),d0
  8016.     or.w    d0,mt_dmacon
  8017.     bra    mt_checkcom2
  8018.  
  8019. mt_setdma:
  8020.      move.w #250,d0
  8021. mt_wait:
  8022.      add.w #1,testchip
  8023.      dbra d0,mt_wait
  8024.     move.w    mt_dmacon,d0
  8025.     or.w    #$8000,d0
  8026.     and.w #%1111111111110011,d0
  8027.     move.w    d0,$dff096
  8028.     move.w #250,d0
  8029. mt_wait2:
  8030.     add.w #1,testchip
  8031.     dbra    d0,mt_wait2
  8032.     lea    $dff000,a5
  8033.     tst.b UseAllChannels
  8034.     beq.s noall
  8035.     lea    mt_voice4(pc),a6
  8036.     move.l    $a(a6),$d0(a5)
  8037.     move.w    $e(a6),$d4(a5)
  8038.     lea    mt_voice3(pc),a6
  8039.     move.l    $a(a6),$c0(a5)
  8040.     move.w    $e(a6),$c4(a5)
  8041. noall:
  8042.     lea    mt_voice2(pc),a6
  8043.     move.l    $a(a6),$b0(a5)
  8044.     move.w    $e(a6),$b4(a5)
  8045.     lea    mt_voice1(pc),a6
  8046.     move.l    $a(a6),$a0(a5)
  8047.     move.w    $e(a6),$a4(a5)
  8048.  
  8049.     add.w    #$10,mt_pattpos
  8050.     cmp.w    #$400,mt_pattpos
  8051.     bne.s    mt_endr
  8052. mt_nex:    clr.w    mt_pattpos
  8053.     clr.b    mt_break
  8054.     addq.b    #1,mt_songpos
  8055.     and.b    #$7f,mt_songpos
  8056.     move.b    mt_songpos,d1
  8057. ;    cmp.b    mt_data+$3b6,d1
  8058. ;    bne.s    mt_endr
  8059. ;    move.b    mt_data+$3b7,mt_songpos
  8060. mt_endr:tst.b    mt_break
  8061.     bne.s    mt_nex
  8062.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  8063.     rts
  8064.  
  8065. mt_setmyport:
  8066.     move.w    (a6),d2
  8067.     and.w    #$fff,d2
  8068.     move.w    d2,$18(a6)
  8069.     move.w    $10(a6),d0
  8070.     clr.b    $16(a6)
  8071.     cmp.w    d0,d2
  8072.     beq.s    mt_clrport
  8073.     bge.s    mt_rt
  8074.     move.b    #$1,$16(a6)
  8075.     rts
  8076. mt_clrport:
  8077.     clr.w    $18(a6)
  8078. mt_rt:    rts
  8079.  
  8080. CODESTORE: dc.l 0
  8081.  
  8082. mt_myport:
  8083.     move.b    $3(a6),d0
  8084.     beq.s    mt_myslide
  8085.     move.b    d0,$17(a6)
  8086.     clr.b    $3(a6)
  8087. mt_myslide:
  8088.     tst.w    $18(a6)
  8089.     beq.s    mt_rt
  8090.     moveq    #0,d0
  8091.     move.b    $17(a6),d0
  8092.     tst.b    $16(a6)
  8093.     bne.s    mt_mysub
  8094.     add.w    d0,$10(a6)
  8095.     move.w    $18(a6),d0
  8096.     cmp.w    $10(a6),d0
  8097.     bgt.s    mt_myok
  8098.     move.w    $18(a6),$10(a6)
  8099.     clr.w    $18(a6)
  8100. mt_myok:move.w    $10(a6),$6(a5)
  8101.     rts
  8102. mt_mysub:
  8103.     sub.w    d0,$10(a6)
  8104.     move.w    $18(a6),d0
  8105.     cmp.w    $10(a6),d0
  8106.     blt.s    mt_myok
  8107.     move.w    $18(a6),$10(a6)
  8108.     clr.w    $18(a6)
  8109.     move.w    $10(a6),$6(a5)
  8110.     rts
  8111.  
  8112. mt_vib:    move.b    $3(a6),d0
  8113.     beq.s    mt_vi
  8114.     move.b    d0,$1a(a6)
  8115.  
  8116. mt_vi:    move.b    $1b(a6),d0
  8117.     lea    mt_sin(pc),a4
  8118.     lsr.w    #$2,d0
  8119.     and.w    #$1f,d0
  8120.     moveq    #0,d2
  8121.     move.b    (a4,d0.w),d2
  8122.     move.b    $1a(a6),d0
  8123.     and.w    #$f,d0
  8124.     mulu    d0,d2
  8125.     lsr.w    #$6,d2
  8126.     move.w    $10(a6),d0
  8127.     tst.b    $1b(a6)
  8128.     bmi.s    mt_vibmin
  8129.     add.w    d2,d0
  8130.     bra.s    mt_vib2
  8131. mt_vibmin:
  8132.     sub.w    d2,d0
  8133. mt_vib2:move.w    d0,$6(a5)
  8134.     move.b    $1a(a6),d0
  8135.     lsr.w    #$2,d0
  8136.     and.w    #$3c,d0
  8137.     add.b    d0,$1b(a6)
  8138.     rts
  8139.  
  8140. mt_nop:    move.w    $10(a6),$6(a5)
  8141.     rts
  8142.  
  8143.  
  8144. mt_checkcom:
  8145.     move.w    $2(a6),d0
  8146.     and.w    #$fff,d0
  8147.     beq.s    mt_nop
  8148.     move.b    $2(a6),d0
  8149.     and.b    #$f,d0
  8150.     tst.b    d0
  8151.     beq    mt_arpeggio
  8152.     cmp.b    #$1,d0
  8153.     beq.s    mt_portup
  8154.     cmp.b    #$2,d0
  8155.     beq    mt_portdown
  8156.     cmp.b    #$3,d0
  8157.     beq    mt_myport
  8158.     cmp.b    #$4,d0
  8159.     beq    mt_vib
  8160.     move.w    $10(a6),$6(a5)
  8161.     cmp.b    #$a,d0
  8162.     beq.s    mt_volslide
  8163.     rts
  8164.  
  8165. mt_volslide:
  8166.     moveq    #0,d0
  8167.     move.b    $3(a6),d0
  8168.     lsr.b    #4,d0
  8169.     tst.b    d0
  8170.     beq.s    mt_voldown
  8171.     add.w    d0,$12(a6)
  8172.     cmp.w    #$40,$12(a6)
  8173.     bmi.s    mt_vol2
  8174.     move.w    #$40,$12(a6)
  8175. mt_vol2:move.w    $12(a6),d0
  8176.     asr.w #2,d0
  8177.     move.w d0,$8(a5)
  8178.     rts
  8179.  
  8180. mt_voldown:
  8181.     moveq    #0,d0
  8182.     move.b    $3(a6),d0
  8183.     and.b    #$f,d0
  8184.     sub.w    d0,$12(a6)
  8185.     bpl.s    mt_vol3
  8186.     clr.w    $12(a6)
  8187. mt_vol3:move.w    $12(a6),d0
  8188.     asr.w #2,d0
  8189.     move.w d0,$8(a5)
  8190.     rts
  8191.  
  8192. mt_portup:
  8193.     moveq    #0,d0
  8194.     move.b    $3(a6),d0
  8195.     sub.w    d0,$10(a6)
  8196.     move.w    $10(a6),d0
  8197.     and.w    #$fff,d0
  8198.     cmp.w    #$71,d0
  8199.     bpl.s    mt_por2
  8200.     and.w    #$f000,$10(a6)
  8201.     or.w    #$71,$10(a6)
  8202. mt_por2:move.w    $10(a6),d0
  8203.     and.w    #$fff,d0
  8204.     move.w    d0,$6(a5)
  8205.     rts
  8206.  
  8207. mt_portdown:
  8208.     clr.w    d0
  8209.     move.b    $3(a6),d0
  8210.     add.w    d0,$10(a6)
  8211.     move.w    $10(a6),d0
  8212.     and.w    #$fff,d0
  8213.     cmp.w    #$358,d0
  8214.     bmi.s    mt_por3
  8215.     and.w    #$f000,$10(a6)
  8216.     or.w    #$358,$10(a6)
  8217. mt_por3:move.w    $10(a6),d0
  8218.     and.w    #$fff,d0
  8219.     move.w    d0,$6(a5)
  8220.     rts
  8221.  
  8222. mt_checkcom2:
  8223.     move.b    $2(a6),d0
  8224.     and.b    #$f,d0
  8225.     cmp.b    #$e,d0
  8226.     beq.s    mt_setfilt
  8227.     cmp.b    #$d,d0
  8228.     beq.s    mt_pattbreak
  8229.     cmp.b    #$b,d0
  8230.     beq.s    mt_posjmp
  8231.     cmp.b    #$c,d0
  8232.     beq.s    mt_setvol
  8233.     cmp.b    #$f,d0
  8234.     beq.s    mt_setspeed
  8235.     rts
  8236.  
  8237. mt_setfilt:
  8238.     move.b    $3(a6),d0
  8239.     and.b    #$1,d0
  8240.     asl.b    #$1,d0
  8241.     and.b    #$fd,$bfe001
  8242.     or.b    d0,$bfe001
  8243.     rts
  8244. mt_pattbreak:
  8245.     not.b    mt_break
  8246.     rts
  8247. mt_posjmp:
  8248.     st reachedend
  8249.     move.b    $3(a6),d0
  8250.     subq.b    #$1,d0
  8251.     move.b    d0,mt_songpos
  8252.     not.b    mt_break
  8253.     rts
  8254. mt_setvol:
  8255.     cmp.b    #$40,$3(a6)
  8256.     ble.s    mt_vol4
  8257.     move.b    #$40,$3(a6)
  8258. mt_vol4:move.b    $3(a6),d0
  8259.     asr.w #2,d0
  8260.     move.w d0,$8(a5)
  8261.     rts
  8262. mt_setspeed:
  8263.     cmp.b    #$1f,$3(a6)
  8264.     ble.s    mt_sets
  8265.     move.b    #$1f,$3(a6)
  8266. mt_sets:move.b    $3(a6),d0
  8267.     beq.s    mt_rts2
  8268.     move.b    d0,mt_speed
  8269.     clr.b    mt_counter
  8270. mt_rts2:rts
  8271.  
  8272. mt_sin:
  8273.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  8274.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  8275.  
  8276. mt_periods:
  8277.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  8278.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  8279.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  8280.  DC.w $007f,$0078,$0071,$0000,$0000
  8281.  
  8282. reachedend: dc.b 0
  8283. mt_speed:    DC.b    6
  8284. mt_songpos:    DC.b    0
  8285. mt_pattpos:    DC.w    0
  8286. mt_counter:    DC.b    0
  8287.  
  8288. mt_break:    DC.b    0
  8289. mt_dmacon:    DC.w    0
  8290. mt_samplestarts:DS.L    $1f
  8291. mt_voice1:    DS.w    10
  8292.         DC.w    1
  8293.         DS.w    3
  8294. mt_voice2:    DS.w    10
  8295.         DC.w    2
  8296.         DS.w    3
  8297. mt_voice3:    DS.w    10
  8298.         DC.w    4
  8299.         DS.w    3
  8300. mt_voice4:    DS.w    10
  8301.         DC.w    8
  8302.         DS.w    3
  8303.  
  8304. testchip: dc.w 0
  8305.  
  8306. ;/* End of File */
  8307. mt_data: dc.l 0
  8308. tstchip: dc.l 0
  8309.  include "SERIAL_NIGHTMARE"
  8310.  
  8311.  
  8312. ingame:
  8313. ; incbin "ab3:includes/ingame"
  8314. gameover: incbin "ab3:includes/gameover"
  8315. welldone: incbin "ab3:includes/welldone"
  8316.